【问题标题】:Remote SSH : no such file or directory远程 SSH:没有这样的文件或目录
【发布时间】:2018-03-10 00:57:31
【问题描述】:

尝试运行此 cmd 时:

ssh user@host " cp -f /path1/`cat /path2/file.txt | awk -F : '{printf $4}' `* ../ "

知道了:

cat: /path2/file.txt: 没有这样的文件或目录

请注意,当直接在服务器中执行它时,它可以工作

感谢您的建议

【问题讨论】:

  • 作为第一个指针:我猜你的本地 shell 解释了cat ...。这意味着反引号 (``) 之间的所有内容都将被替换为您计算机上该命令的输出(我认为甚至在 ssh 进程启动之前)。
  • 请提供更多信息,文件应该是什么样子
  • 对 SSH 参数使用单引号。并且根本不要使用反引号。它们已被弃用。请改用$()
  • @ceving 这样做会显示一个错误中继到 awk

标签: linux unix ssh ksh


【解决方案1】:

试试这个:

ssh user@host 'cp -f /path1/$(awk -F : '\''{printf $4}'\'' /path2/file.txt)* ..'

这可能也很有趣:Useless Use of Cat Award

或者这个:

ssh user@host 'cp -f '\'"$path1"\''/$(awk -F : '\''{printf $4}'\'' /path2/file.txt)* ..'

记住:

  • 单引号不计算 $。
  • 双引号确实计算 $。
  • 如果要将单引号放入单引号字符串中,则必须将字符串分成两部分,并在其间放置一个转义的单引号。 'a'\''b' 变为 a'b
  • 如果您需要计算单引号字符串中的变量,您必须将字符串分成两部分并将双引号变量放在中间。 'a'"$x"'b' 变为 a${x}b

【讨论】:

  • 如何将 /path1 作为本地服务器的变量?