【问题标题】:shell script can't see files in remote directoryshell脚本看不到远程目录中的文件
【发布时间】: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 
  1. 如果我 ssh 进入服务器并直接运行命令,我会看到“$filename found”。
  2. 如果我使用方法 1 运行上述代码块,我会看到“$filename not found”。
  3. 如果我将此块复制到一个新脚本中(我们称之为 script2),并使用方法 2 运行它,那么我会看到“$filename found”。

我一生都无法弄清楚这种差异来自何处。我认为不同之处可能是 script2 通过管道传输到 bash 而我的原始脚本是使用 zsh 运行的......但考虑到在服务器上逐字运行相同的命令,使用其默认的 zsh shell,正确返回......我'米难住了。

:(任何帮助将不胜感激!

【问题讨论】:

  • 不是你的答案,而是为了测试文件的存在,if [ -f <filename> ]; then 更简单。

标签: linux bash shell ssh zsh


【解决方案1】:

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

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

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

我不明白为什么您会收到此消息而不是错误消息。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-11-18
    • 1970-01-01
    • 1970-01-01
    • 2013-07-09
    • 1970-01-01
    • 2015-11-22
    • 1970-01-01
    相关资源
    最近更新 更多