Я хочу подключиться к удаленному компьютеру с Ubuntu, .bashrc
установить исходный код my и выполнить команду, которая зависит от параметров, установленных этим .bashrc
. Все это в интерактивной оболочке, которая не закрывается после выполнения команды.
То, что я пробовал до сих пор
ssh user@remote_computer -t 'bash -l -c "my_alias;bash"'
или просто
ssh user@remote_computer -t "my_alias;bash"
Это работает для общих команд (как ls
например), но когда я пытаюсь запустить псевдоним, определенный в, .bashrc
я получаю ошибку:
bash: my_alias: command not found
Но потом, когда я снова пишу это вручную и запускаю, это работает!
Итак, как я могу убедиться, что .bashrc
источник перед вызовом команды?
Ответы:
Проблема в том, что вы пытаетесь запустить псевдоним в неинтерактивной оболочке. Когда вы запускаете
ssh user@computer command
,command
запускается неинтерактивно.Неинтерактивные оболочки не читают псевдонимы (от man bash):
Это работает, если вы запустите его снова вручную, потому что последняя
bash
команда запускает интерактивную оболочку, поэтому ваши псевдонимы теперь доступны.В качестве альтернативы вы можете запустить на удаленном компьютере интерактивную оболочку (
bash -i
) вместо простой оболочки (bash -l
) для запуска псевдонима:Это кажется очень сложным подходом. Вы не объяснили, почему именно вам нужно это сделать, но рассмотрите следующие варианты:
Просто запустите на удаленном компьютере интерактивную оболочку обычного входа в систему и выполните команду вручную:
Если вы всегда хотите, чтобы этот псевдоним запускался при подключении к этому компьютеру, отредактируйте
~/.profile
(или~/.bash_profile
, если имеется) удаленного компьютера и добавьте следующую строку в конце:Потому
~/.profile
что читается каждый раз, когда запускается оболочка входа (например, каждый раз, когда вы подключаетесь черезssh
, например), это будетmy_alias
запускаться при каждом подключении.Обратите внимание, что по умолчанию оболочки входа в систему читают
~/.profile
или~/.bash_profile
игнорируют~/.bashrc
. В некоторых дистрибутивах (например, Debian и его производных и Arch), таких как Ubuntu, есть источник по умолчанию~/.profile
или~/.bash_profile
источник файлов,~/.bashrc
что означает, что ваши псевдонимы, определенные в~/.bashrc
, также будут доступны в оболочке входа. Это не относится ко всем дистрибутивам, поэтому вам, возможно, придется отредактировать свой источник~/.profile
вручную~/.bashrc
. Также обратите внимание, что если он~/.bash_profile
существует,~/.profile
bash будет игнорировать его.источник
~/.basyrc
он автоматически читается~./profile
, поэтому любые псевдонимы, определенные в~/.bashrc
, также будут доступны для чтения любых оболочек~/.profile
. Все, что вам действительно нужно было сделать, чтобы заставить это работать, - это явно запустить интерактивную оболочку (-i
).Мне пришлось прокомментировать часть моего .bashrc, которая не позволяла использовать псевдонимы, и добавить команду expand_aliases. Это было прокомментировано
И это было добавлено
Тогда моя команда сработала:
источник