HP-UX上的KSH脚本使用命令运行SSH。脚本在服务器上运行之前评估环境变量

时间:2013-12-16 21:18:19

标签: unix ksh hp-ux

以下是该剧本的片段:

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

它仍会在第二台机器运行之前评估第一台机器的变量。

如果我在本地使用该脚本并在远程计算机上进行尝试,它将按正常目录正常工作。

1 个答案:

答案 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