以下是该剧本的片段:
ssh $(hostname | cut -f1 -d1)2 " echo 'Secondary Node ';
OH=$(env | grep ORACLE_HOME | cut -c13-55);
CN=$(env | grep CONTEXT_NAME | cut -c14-40);
cd $OH/appsutil/scripts/$CN;
./myscript.sh pass=****;
clear;
./myscript.sh pass=****;"
错误:
错误-ksh: hostname1/appsutil/scripts/erpaaps1_apps1s/myscript.sh: not found
在脚本连接到第二台机器之前,脚本会对第一台机器上的变量进行评估。当发生这种情况时,它会进入错误的目录(因为它从第一个服务器获得了值而不是它所使用的那个服务器)。
我也用这种方式尝试过脚本:
ssh $(hostname | cut -f1 -d1)2 ' echo "Secondary Node ";
OH=$(env | grep ORACLE_HOME | cut -c13-55);
CN=$(env | grep CONTEXT_NAME | cut -c14-40);
cd $OH/appsutil/scripts/$CN;
./myscript.sh pass=****;
clear;
./myscript.sh pass=****;'
错误:-ksh: hostname1/appsutil/scripts/erpaaps1_apps1s/myscript.sh: not found
它仍会在第二台机器运行之前评估第一台机器的变量。
如果我在本地使用该脚本并在远程计算机上进行尝试,它将按正常目录正常工作。
答案 0 :(得分:1)
您需要将要在远程计算机上运行的部分放在单引号中。
ssh $(hostname | cut -f1 -d1)2 ' echo "Secondary Node ";
OH=$(env | grep ORACLE_HOME | cut -c13-55);
CN=$(env | grep CONTEXT_NAME | cut -c14-40);
cd $OH/appsutil/scripts/$CN;
.myscript.sh pass=****;
clear;
./myscript.sh pass=****;'
这可以防止本地shell在将变量发送到SSH之前插入变量。
更好:
将所有这些命令放在远程计算机上的shell脚本中,然后只执行该脚本。
ssh ssh $(hostname | cut -f1 -d1)2 /path/to/my/script.sh