Как заключить в кавычки команду при написании сценариев оболочки

928
Jan

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

#!/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 ...) 

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

0
Я думаю, что вы получите больше поддержки для этого типа вопроса здесь http://unix.stackexchange.com/ Rhyuk 11 лет назад 0
Такого рода вопрос полностью посвящен теме SU. Journeyman Geek 11 лет назад 0
Пожалуйста, смотрите [BashFAQ / 050] (http://mywiki.wooledge.org/BashFAQ/050) другими словами, не используйте все эти переменные. Dennis Williamson 11 лет назад 0

1 ответ на вопрос

1
Jan

A better way is:

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

The main problem was with $SSHOPTS, the trick is to put each argument in a separate element of an array.

@Dennis thanks for the useful link.