shell脚本从不同的shell运行多个脚本

时间:2013-06-03 20:08:15

标签: shell

我想从单个主shell脚本运行2个不同的脚本。

  • 第一个使用以下命令“rosh -n -l abcd”(它将使用用户abcd登录到服务器并且在同一个shell上我需要运行另一个script#2script#3 ......等。)

    脚本#2-从那里我需要使用su - xyz更改用户并提供密码(如果我可以在文件中对其进行硬编码,则可以正常使用)(脚本名称为logintoServer)

    脚本#3-在同一个shell中运行一些脚本以验证服务器停止的开始...

我做了以下但是失败了

  • 我有一个脚本rosh -n <servername> -l abcd /bin/sh -c "su - xyz"(我必须在同一个shell中运行此命令)

    以下是错误:

    1. 我在执行“标准必须是tty”时遇到错误
    2. 我尝试创建2个不同的脚本并运行,但问题是一旦第一个脚本运行它就不会运行第二个脚本,直到我退出脚本。 (我需要从第一个脚本创建的子shell运行第二个脚本....)

1 个答案:

答案 0 :(得分:0)

我没有rosh,我没有rosh的手册页,但ssh存在类似的问题:

ssh localhost /bin/bash -c 'echo x' # (prints nothing)
ssh localhost "/bin/bash -c 'echo x'" # x
ssh localhost "/bin/bash -c 'tty'" # not a tty
ssh -t localhost "/bin/bash -c 'tty'" # /dev/pts/12\nConnection to localhost closed.
ssh localhost "/bin/bash -c 'su - $USER'" # su: must be run from a terminal
ssh -t localhost "/bin/bash -c 'su - $USER'"

最后一次要求输入密码然后给了我一个shell,所以这将是3个步骤中的2个。

因此,一个想法是查看rosh是否也有-t选项,另一个想法是用引号括起/bin/bash...(将需要一些转义为第3级)。

rosh对等效命令的评价是什么?

<强>更新 最新状态:

rosh -n $host -l abcd -t "/bin/sh -c 'su - $user'"

接下来,我会通过/bin/su - xyz代替/bin/sh -c 'su - xyz'来保存一步,然后您可以稍后使用单引号,例如

rosh -n $host -l abcd -t "/bin/su - $user -c 'echo $PATH'"

这应该打印$ PATH,如echo命令所示。显然它不包含java。试试man suwhich javaman whichsu ... -c cmd使用/ etc / passwd中指定的shell运行cmd,因此请在远程计算机上说</etc/passwd grep $user以找出使用的shell。如果它是bash你可以改变.bashrc左右的$ PATH,对于我不确切知道的其他shell。

或者在启动java时指定绝对路径。

关于密码:使用ssh我设法使用私钥/公钥和ssh-agent。对于rosh,我不知道这是否有效。