我正在尝试在远程服务器上编写交互式脚本,其默认 shell 是 zsh。我一直在尝试两种不同的方法来使其发挥作用:
方法 1: ssh -t <user>@<host> "$(<serverStatusReport.sh)"
方法 2: 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”。
- 如果我将此 block 复制到一个新脚本中(我们称之为 script2),并使用方法 2 运行它,那么我会看到“$filename found”。
我一生都无法弄清楚这种差异是从哪里来的。我认为不同之处可能在于 script2 通过管道传输到 bash,而我的原始脚本正在使用 zsh 运行...但考虑到在服务器上逐字运行相同的命令,使用其默认的 zsh shell,可以正确返回...我被难住了。
:(任何帮助将不胜感激!
最佳答案
我猜当执行方法 1 时,本地 shell 会扩展 "$(<serverStatusReport.sh)"
,而不是 Remote 。您可以通过以下方式轻松检查:
ssh -t <user>@<host> "$(<hostname)"
是 serverStatusReport.sh
脚本也在本地主机的 PATH 中吗?
我不明白的是为什么您收到此消息而不是错误消息。
关于linux - shell脚本看不到远程目录中的文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32707028/