В моем .bashrc
я определяю функцию, которую я могу использовать в командной строке позже:
function mycommand() {
ssh [email protected] cd testdir;./test.sh "$1"
}
При использовании этой команды на удаленном хосте выполняется только команда cd
; команда test.sh
выполняется на локальном хосте. Это связано с тем, что точка с запятой разделяет две разные команды: команду ssh
и команду test.sh
.
Я попытался определить функцию следующим образом (обратите внимание на одинарные кавычки):
function mycommand() {
ssh [email protected] 'cd testdir;./test.sh "$1"'
}
Я попытался сохранить команду cd
и команду test.sh
вместе, но аргумент $1
не разрешается независимо от того, что я передаю функции. Всегда пытаются выполнить команду
./test.sh $1
на удаленном хосте.
Как правильно определить mycommand
, чтобы сценарий test.sh
выполнялся на удаленном хосте после перехода в каталог testdir
с возможностью передачи аргумента, заданного mycommand
, в test.sh
?
&&
вместо точки с запятой для объединения команд, выполняемых на удаленном хосте:cd testdir && ./test.sh "$1"
. При такой форме (из-за короткого замыкания при оценке&&
в bash) в случае сбояcd
вторая команда не будет выполнена, и вы не сможете непреднамеренно запустить другуюtest.sh
в домашнем каталогеuser
. - person Alp   schedule 29.08.2013