【发布时间】:2015-12-18 20:24:11
【问题描述】:
我正在尝试在远程服务器上编写一个交互式脚本,它的默认 shell 是 zsh。我一直在尝试两种不同的方法来让它发挥作用:
方法一: ssh -t <user>@<host> "$(<serverStatusReport.sh)"
方法二: ssh <user>@<host> "bash -s" < serverStatusReport.sh
到目前为止,我一直在使用方法 1,但遇到以下问题 - 我有一段代码根据当前目录中是否存在某些文件来运行:
filename="./service_log.*"
if ls $filename 1> /dev/null 2>&1 ; then
echo "$filename found."
##process files
else
echo "$filename not found."
fi
- 如果我 ssh 进入服务器并直接运行命令,我会看到“$filename found”。
- 如果我使用方法 1 运行上述代码块,我会看到“$filename not found”。
- 如果我将此块复制到一个新脚本中(我们称之为 script2),并使用方法 2 运行它,那么我会看到“$filename found”。
我一生都无法弄清楚这种差异来自何处。我认为不同之处可能是 script2 通过管道传输到 bash 而我的原始脚本是使用 zsh 运行的......但考虑到在服务器上逐字运行相同的命令,使用其默认的 zsh shell,正确返回......我'米难住了。
:(任何帮助将不胜感激!
【问题讨论】:
-
不是你的答案,而是为了测试文件的存在,
if [ -f <filename> ]; then更简单。