Наблюдение &
поскольку узел мог бы помочь: думайте о том, что Вы хотите сделать как взятие вывода 2, таким образом, 2>
, и связь его вместе с 1, таким образом, 2>&1
Самый очевидный способ выполнить команду удаленно состоит в том, чтобы указать его на ssh командной строке. Команда ssh всегда интерпретируется оболочкой удаленного пользователя.
ssh bob@example.com '. ~/.profile; command_that_needs_environment_variables'
ssh -t bob@example.com '. ~/.profile; exec zsh'
Общие учетные записи обычно являются плохой идеей; если вообще возможный, получите отдельные счета на каждого пользователя. Если Вы застреваете с общей учетной записью, можно сделать псевдоним:
ssh -t shared-account@example.com 'HOME=~/bob; . ~/.profile; exec zsh'
При использовании аутентификации с открытым ключом (снова, рекомендуемый), можно определить команды на ключ в ~/.ssh/authorized_keys
. См. этот ответ для большего количества объяснений. Отредактируйте строку для своего ключа ~/.ssh/authorized_keys
на сервере (все на одной строке):
command="HOME=$HOME/bob;
if [ -n \"$SSH_ORIGINAL_COMMAND\" ]; then
eval \"$SSH_ORIGINAL_COMMAND\";
else exec \"$SHELL\"; fi" ssh-rsa AAAA…== bob@some.where
Для выполнения команды удаленно после подключения сервера добавьте в .ssh/config файле следующий отрывок
PermitLocalCommand yes
Host <server-ip-address>
LocalCommand *command*
LocalCommand
директива должна выполнить команду на локальной оболочке, не на удаленной оболочке.
– Amelio Vazquez-Reina
15.09.2011, 01:56
exec
команда. Какexec zsh
отличающийся от вызоваzsh
непосредственно? Почему это важно в данном случае? – Amelio Vazquez-Reina 15.09.2011, 02:47ssh -t shared-account@example.com 'HOME=~/bob; exec zsh'
Я добираюсьHOME=~/bob: command not found
. Я думаю, что идуtcsh
. Я получаю ту же проблему, если я пробуюHOME=/home/bob
. Я примерил удар и zsh. Какие-либо подсказки, что может вызывать это? Наконец, был бы синтаксис выше оставлять меня с ssh сессией открытым? (что я хочу). Еще раз спасибо. – Amelio Vazquez-Reina 15.09.2011, 03:04exec
заменяет исходную оболочку zsh; безzsh
, исходная оболочка осталась бы в памяти до zsh выходы и затем вышла бы. Основное различие сохраняет немного памяти, это не очень важно. Если Ваша оболочка входа в систему (t) csh, использоватьsetenv HOME ~/bob; exec zsh
. Наконец, так как zsh запускается без аргумента, Вы получаете сессию оболочки, как Вы добрались бы, если бы Вы просто работалиssh
и имел zsh как Вашу оболочку входа в систему. – Gilles 'SO- stop being evil' 15.09.2011, 03:09exec zsh
команда? – Amelio Vazquez-Reina 06.10.2015, 03:05ZDOTDIR
заставить zsh искать точечные файлы в другом каталоге. Если Вы действительно имеете некоторый контроль над точечными файлами затем, можно сделать что-то, любят, добавляютeval $LC_STARTUP_CODE
кому:$ZDOTDIR/.zshrc
и передайте код для выполнения в переменной средыLC_STARTUP_CODE
. – Gilles 'SO- stop being evil' 06.10.2015, 13:07