2017-09-28 81 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

相關問題