В моя .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
в homedir наuser
. - person Alp   schedule 29.08.2013