外壳脚本看不到远程目录中的文件



我试图在远程服务器上编写一个交互式脚本,其默认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. 如果我把这个块复制到一个新的脚本(让我们称之为script2),并使用方法2运行它,然后我看到"$filename found"。

我怎么也弄不明白这种差异是从哪里来的。我认为区别可能是script2是管道到bash中,而我的原始脚本是用zsh运行的…但是考虑到在服务器上逐字运行相同的命令,使用其默认的ZSH shell,正确返回…我难住了。

:任何帮助都将非常感激!

我猜在执行方法1时,它是扩展"$(<serverStatusReport.sh)"的本地shell,而不是远程。您可以使用以下命令轻松检查:

ssh -t <user>@<host> "$(<hostname)"

serverStatusReport.sh脚本也在本地主机的PATH中吗?

我不明白的是为什么你得到这个消息而不是错误消息

相关内容

最新更新