Работает команда, выполненная в следующем скрипте:

#!/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`

Это в основном выполняет это на удаленном хосте:

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

Но как это должно быть экранировано / отформатировано, если я хочу это так:

REM_FILES=`ssh ...`

Или же:

REM_FILES=$(ssh ...)

Хотя мой текущий скрипт работает нормально, я хотел бы знать, как правильно экранировать / заключать в кавычки при написании сценариев оболочки.

1 ответ1

1

Лучший способ это:

#!/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\""`

Основная проблема была с $ SSHOPTS, трюк в том, чтобы поместить каждый аргумент в отдельный элемент массива.

@Dennis спасибо за полезную ссылку.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .