1

Прежде всего, я на OSX10. Моя оболочка по умолчанию - BASH, которую я настроил (через .profile и .bashrc) для автоматического запуска оболочки FISH при открытии моего эмулятора терминала. Это позволяет мне устанавливать переменные и т.д. в BASH, прежде чем я загружу FISH.

Однако иногда я хочу запустить сценарии, написанные для BASH, из моей оболочки FISH. Это необходимо, потому что FISH не синтаксически совместим с BASH. При вводе 'bash' в моей FISH, открываемая мной BASH автоматически открывает другую FISH поверх себя из-за моего .profile/.bashrc. Это делает все это подозрительным (каламбур), потому что мне нужно выйти из верхней части FISH, чтобы попасть в BASH поверх второй FISH.

Мой вопрос: я знаю, что BASH может быть загружен как оболочка входа в систему (выполнение .profile) и оболочка без регистрации (выполнение .bashrc). Можно ли добавить третий «контекст», который я могу настроить для загрузки при запуске BASH изнутри FISH? Это решило бы проблему двойного FISH, потому что я бы не смог загрузить ни .bashrc, ни .profile.

Надеюсь, вы понимаете мой вопрос - заранее спасибо за ответы!

1 ответ1

2

Если вы хотите запускать сценарии из своей оболочки рыб, нет необходимости добавлять третий контекст, все, что вам нужно сделать, это запустить bash myscript.sh .

Со страницы руководства bash:

~/.bash_profile
    The personal initialization file, executed for login shells
~/.bashrc
    The individual per-interactive-shell startup file

Если вы не вызываете bash -l оболочки входа или интерактивную оболочку bash а вместо этого используете сценарий в качестве аргумента, файл не загружается.

Например, если файл test.sh содержит

function bashtest {
    echo "test"
}
bashtest

Если я выполняю его, используя bash, он работает правильно, используя bash в качестве интерпретатора.

Welcome to fish, the friendly interactive shell
Type help for instructions on how to use fish
$user@host ~> bash test.sh
$test
$user@host ~> 

Если вы хотите ввести команду bash напрямую, вы можете передать свою команду bash следующим образом:

$user@host ~> echo "function bashtest { echo test; }; bashtest" | bash
$test
$user@host ~> 

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .