【问题标题】:KSH script on HP-UX runs SSH with commands. Script evaluates environmental variables before running on serverHP-UX 上的 KSH 脚本使用命令运行 SSH。脚本在服务器上运行之前评估环境变量
【发布时间】:2013-12-16 21:18:19
【问题描述】:

这里是脚本的一个片段:

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 连接到第二台机器之前评估第一台机器上的变量。发生这种情况时,它会进入错误的目录(因为它从第一台服务器而不是它通过 SSH 连接的服务器获取值)。

我也试过这样的脚本:

 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

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

如果我使用脚本并在本地远程机器上尝试它,它会在正确的目录下按预期工作。

【问题讨论】:

  • 请用您收到的错误消息更新您的答案。
  • 远程机器上是否有两个脚本,一个名为.myscript.sh,一个名为myscript.sh(一个带点,一个不带点)?如果没有,你为什么要同时尝试?
  • DBA 说他需要运行脚本两次。我不知道为什么。

标签: unix ksh hp-ux


【解决方案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

【讨论】:

  • 我已经尝试过这种方式,但它不起作用,它仍然从第一台服务器获取值。我无法在需要通过 SSH 连接的其他服务器上编写脚本。
  • 确保将现有的单引号替换为双引号。
  • 多诺万,我已经这样做了。我确实替换了 echo 命令中的引号。
  • 然后尝试我的其他建议,将所有内容放在远程计算机上的 shell 脚本中,进行测试以确保它执行您希望它执行的操作,然后只需通过 SSH 执行该远程脚本。
  • 脚本在远程机器上工作,只有当它必须从脚本中的第一个 SSH 时它才不起作用。
猜你喜欢
  • 1970-01-01
  • 2010-11-03
  • 2012-03-27
  • 2013-08-08
  • 1970-01-01
  • 2018-07-11
  • 1970-01-01
  • 2015-05-16
  • 2012-08-24
相关资源
最近更新 更多