2017-09-28 7 views
0

Lorsque vous essayez d'exécuter ce cmd:SSH à distance: aucun fichier ou répertoire

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

obtenu ceci:

chat: /path2/file.txt: Aucun fichier ou répertoire

Notez que lorsque l'exécuter directement sur le serveur il fonctionne

Merci pour tout conseil

+2

Comme premier pointeur: Je suppose que votre shell local interprète le 'chat ...'. Cela signifie que tout ce qui est entre les guillemets ('') est remplacé par la sortie de cette commande sur votre ordinateur (je pense même avant que le processus ssh ne soit démarré). – Felix

+0

Et s'il vous plaît fournir un peu plus d'informations à quoi les fichiers devraient ressembler – Felix

+0

Utilisez des guillemets simples pour les arguments SSH. Et n'utilisez pas de back-ticks du tout. Ils sont obsolètes. Utilisez '$()' à la place. – ceving

Répondre

2

Essayez ceci:

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

Cela pourrait être aussi intéressant: Useless Use of Cat Award.

Ou ceci:

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

Gardez à l'esprit:

  • citations de ne pas évaluer Singe $.
  • Les guillemets évaluent $.
  • Si vous voulez mettre une seule citation dans une seule chaîne entre guillemets, vous devez diviser la chaîne en deux parties et mettre une guillemets simple échappée entre les deux. 'a'\''b' devient a'b
  • Si vous devez évaluer une variable dans une seule chaîne entre guillemets, vous devez scinder la chaîne en deux parties et placer la variable entre guillemets. 'a'"$x"'b' devient a${x}b
+0

qu'en est-il de faire/path1 comme une variable du serveur local? – FuSsA