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="jan@example.com"

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.


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="jan@example.com"

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.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.