Wie zitiert man einen Befehl zwischen den Backticks beim Shell-Scripting?

1032
Jan

Der Befehl, der im folgenden Skript ausgeführt wird, funktioniert:

#!/bin/bash -xv REM_DIR="/home/jan/rem-dir" SSHOPTS="-C -c arcfour256 -o "\""ServerAliveInterval 15"\" SSHUSER="jan@example.com"  CMD="ssh $SSHOPTS \"$SSHUSER\" \"find \\\"$REM_DIR/\\\" -path *lost+found -prune -o -type f -printf \\\"%P\\\\n\\\"\"" REM_FILES=`eval $CMD` 

Es führt dies grundsätzlich auf dem Remote-Host aus:

find "/home/jan/rem-dir/" -path *lost+found -prune -o -type f -printf "%P\n" 

Aber wie soll es entkommen / formatiert werden, wenn ich es so will:

REM_FILES=`ssh ...` 

Oder:

REM_FILES=$(ssh ...) 

Mein aktuelles Skript läuft zwar einwandfrei, aber ich würde gerne wissen, wie man beim Shell-Script richtig entkommt.

0
Ich denke, Sie werden hier mehr Unterstützung für diese Art von Frage erhalten http://unix.stackexchange.com/ Rhyuk vor 12 Jahren 0
Diese Art von Frage ist auch vollständig auf SU ausgerichtet Journeyman Geek vor 12 Jahren 0
Siehe auch [BashFAQ / 050] (http://mywiki.wooledge.org/BashFAQ/050), verwenden Sie also nicht alle diese Variablen. Dennis Williamson vor 12 Jahren 0

1 Antwort auf die Frage

1
Jan

Ein besserer Weg ist:

#!/bin/bash -xv REM_DIR="/home/jan/rem-dir" SSHOPTS=(-C -c arcfour256 -o "ServerAliveInterval 15") SSHUSER="jan@example.com"  REM_FILES=`ssh "$" "$SSHUSER" "find \"$REM_DIR/\" -path \"*lost+found\" -prune -o -type f -printf \"%P\\n\""` 

Das Hauptproblem bestand bei $ SSHOPTS. Der Trick besteht darin, jedes Argument in ein separates Element eines Arrays zu setzen.

@Dennis Danke für den nützlichen Link.