2017-09-28 83 views
0

当试图运行这个CMD:远程SSH:没有这样的文件或目录

ssh [email protected] " cp -f /path1/`cat /path2/file.txt | awk -F : '{printf $4}' `* ../ " 

得到这个:

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

注意,当在服务器中直接执行它,它的工作原理

感谢您的任何意见

+2

作为第一个指针:我猜你的本地shell会解释'cat ...'。这意味着反引号('')之间的所有内容都将被替换为计算机上该命令的输出(我认为即使在ssh进程启动之前)也是如此。 – Felix

+0

请提供更多信息,以了解这些文件的外观应该如何 – Felix

+0

为SSH参数使用单引号。并且根本不使用反标记。他们已被弃用。改用'$()'。 – ceving

回答

2

试试这个:

ssh [email protected] 'cp -f /path1/$(awk -F : '\''{printf $4}'\'' /path2/file.txt)* ..' 

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

或者这样:

ssh [email protected] 'cp -f '\'"$path1"\''/$(awk -F : '\''{printf $4}'\'' /path2/file.txt)* ..' 

请记住:

  • 辛格报价不评价$。
  • 双引号确实评估$。
  • 如果要将单引号放入单引号字符串中,则必须将该字符串拆分为两部分,并在两者之间放置一个转义单引号。 'a'\''b'变为a'b
  • 如果您需要评估单引号字符串中的变量,则必须将字符串分为两部分,并将双引号变量置于两者之间。 'a'"$x"'b'变成a${x}b
+0

作为一个变量从本地服务器制作/ path1呢? – FuSsA

相关问题