我正在使用pssh在远程服务器上运行脚本。对于linux我没有遇到问题但是对于solaris我在运行脚本时遇到了问题。
我正在使用shebang来使用bash shell,它正在使用sh shell导致问题。
# cat test.sh
#!/usr/bin/env bash
UNAME=$(uname)
if [ $UNAME = SunOS ]; then
echo SunOS
fi
# ssh host1 'bash -s' <test.sh
SunOS
# pssh -H host1 -i -I <test.sh
[1] 04:15:47 [FAILURE] host1 Exited with error code 2
Stderr: Pseudo-terminal will not be allocated because stdin is not a terminal.
-sh: syntax error: `UNAME=$' unexpected
#
答案 0 :(得分:2)
只有在运行可执行文件时才处理shebang,而不是在读取stdin时,Linux和Solaris都会忽略它。碰巧Linux sh
实际上是bash
,因此支持您使用的语法。
更简单的解决方法是修复脚本以使其可移植到任何shell:
UNAME=`uname`
if [ "$UNAME" = SunOS ]; then
echo SunOS
fi
或者,您可以将远程用户的默认shell更改为更标准的内容,例如ksh
或bash
。