Jak cytować polecenie między backtickami podczas wykonywania skryptów powłoki

0

Polecenie wykonane w następującym skrypcie działa:

#!/bin/bash -xv
REM_DIR="/home/jan/rem-dir"
SSHOPTS="-C -c arcfour256 -o "\""ServerAliveInterval 15"\"
SSHUSER="[email protected]"

CMD="ssh $SSHOPTS \"$SSHUSER\" \"find \\\"$REM_DIR/\\\" -path *lost+found -prune -o -type f -printf \\\"%P\\\\n\\\"\""
REM_FILES=`eval $CMD`

Zasadniczo wykonuje to na zdalnym hoście:

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

Ale w jaki sposób należy go zmienić / sformatować, jeśli chcę to w ten sposób:

REM_FILES=`ssh ...`

Lub:

REM_FILES=$(ssh ...)

Chociaż mój obecny skrypt działa dobrze, chciałbym wiedzieć, jak poprawnie uciec / cytować podczas wykonywania skryptów powłoki.

Jan
źródło
Myślę, że uzyskasz więcej wsparcia dla tego typu pytań tutaj unix.stackexchange.com
Rhyuk
Tego rodzaju pytanie dotyczy wyłącznie SU
Journeyman Geek
Zobacz BashFAQ / 050 innymi słowy, nie używaj wszystkich tych zmiennych.
Dennis Williamson

Odpowiedzi:

1

Lepszym sposobem jest:

#!/bin/bash -xv
REM_DIR="/home/jan/rem-dir"
SSHOPTS=(-C -c arcfour256 -o "ServerAliveInterval 15")
SSHUSER="[email protected]"

REM_FILES=`ssh "${SSHOPTS[@]}" "$SSHUSER" "find \"$REM_DIR/\" -path \"*lost+found\" -prune -o -type f -printf \"%P\\n\""`

Główny problem dotyczył $ SSHOPTS, sztuczka polega na umieszczeniu każdego argumentu w osobnym elemencie tablicy.

@Dennis dziękuje za przydatny link.

Jan
źródło