Im SSH-Befehl zugewiesene Variable gibt keinen korrekten Wert zurück

Im SSH-Befehl zugewiesene Variable gibt keinen korrekten Wert zurück

Ich führe den folgenden Befehl in diesem sshTeil meines Skripts aus. Der Befehl soll die Dateigröße von lsOption 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.shVergessen 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 $5von der Shell interpretiert wird.

verwandte Informationen