Ich führe den folgenden Befehl in diesem ssh
Teil meines Skripts aus. Der Befehl soll die Dateigröße von ls
Option reduzieren und in einer Variablen speichern. Drucken Sie dann die Variable aus:
echo "Enter srouce file";
read src_file;
src_size =`ls -latr $src_file | awk '{ print $5 }' `;
echo "The source file size is $src_size ";
Dies funktioniert einwandfrei, wenn es in der Befehlszeile ausgeführt wird.
Wenn ich denselben Befehl in einem Skript versuche über ssh
:
ssh user@server "echo "enterfile";read src_file;echo "enter path ";read path;cd $path;src_size=`ls -latr $src_file | awk '{ print $5 }' ` ; echo The source file size is $src_size;"
Dies schlägt fehl. Es speichert einen lokalen temporären Wert und gibt denselben anstelle der korrekten Dateigröße zurück.
Antwort1
Verwenden Sie ein Skript, um zu vermeiden, dass Ihr Befehl durch Anführungszeichenprobleme durcheinandergerät.
Es ist übersichtlicher, übersichtlicher und sieht besser aus :)!
Machen Sie beispielsweise einfach Folgendes:
echo "Enter source file"
read src_file
ssh user@server 'bash -s' < /path/to/local_script.sh "$src_file"
Inhalt von local_script.sh
:
#!/bin/bash
src_file="$1"
src_size =`ls -latr $src_file | awk '{ print $5 }'`
echo "The source file size is $src_size "
local_script.sh
Vergessen Sie nicht, den Pfad zu Ihrem :) hinzuzufügen .
Antwort2
Sie können doppelte Anführungszeichen nicht in andere doppelte Anführungszeichen verschachteln, ohne eine Escape-Sequenz auszuführen. Und indem Sie Backticks in Anführungszeichen setzen, werden sie auf dem lokalen Computer und nicht auf dem Remotecomputer ausgewertet.
Etwas Ähnliches sollte Ihr Ziel erreichen:
ssh user@server 'echo "Enter file: "; read src_file; echo "Enter path: "; read path; cd $path; src_size=`ls -latr $src_file | awk "{ print \$5 }"`; echo "The source file size is $src_size;"'
'{ print $5 }'
Beachten Sie, dass ich das in ändern musste "{ print \$5 }"
, um das zu maskieren, $
da es jetzt in doppelten Anführungszeichen statt in einfachen steht und ich nicht möchte, dass das $5
von der Shell interpretiert wird.