gpt4 book ai didi

linux - shell脚本看不到远程目录中的文件

转载 作者:太空宇宙 更新时间:2023-11-04 03:32:34 25 4
gpt4 key购买 nike

我正在尝试在远程服务器上编写交互式脚本,其默认 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
  1. 如果我通过 ssh 进入服务器并直接运行命令,我会看到“$filename found”。
  2. 如果我使用方法 1 运行上面的代码块,我会看到“$filename not found”。
  3. 如果我将此 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com