LINUX.ORG.RU

Shell, пути с символами пробела.


0

0

Здравствуй, All.

Возник вопрос такой, делаю:

BINARY="/home/asm/space space space/binary/dosemu"
OPTS="$FIRST $SECOND"
COMMAND="$SUDO $BINARY $OPTS"

$COMMAND "$INSTALL" "-I $STRING_I" "$@"

Получаю типо:
./dosemu: line 221: /home/asm/space: Нет такого файла или каталога

Вопрос: как с этим бороться?

★★
Ответ на: комментарий от sdio

Ну да, получаю:

./dosemu: line 221: "/home/asm/space: Нет такого файла или каталога
вместо
./dosemu: line 221: /home/asm/space: Нет такого файла или каталога

Было бы всё так просто, не спрашивал бы...

ASM ★★
() автор топика
Ответ на: комментарий от sdio

Нашел ответ:

COMMAND="$SUDO \"$BINARY\" \"$OPTS\""

eval $COMMAND
а не просто
$COMMAND

Всем спасибо, все свободны.

ASM ★★
() автор топика
Ответ на: комментарий от mqspi

> Ужасный ответ, возможны shell-инъекции.

Возможны, конечно, но мало вероятно что кто-то будет работать в каталоге /home/`rm -Rf ~`/.

> Правильный ответ - использовать функции.

Не совсем себе представляю, как мне решить свою задачу с помощью них.

ASM ★★
() автор топика
Ответ на: комментарий от ASM

> Возможны, конечно, но мало вероятно что кто-то будет работать в каталоге /home/`rm -Rf ~`/.

Не обязательно деструктивная инъекция, элементарное ' в имени файла вызовет syntax error. То, что это маловероятно - не оправдание.

> Не совсем себе представляю, как мне решить свою задачу с помощью них.


Очень просто:
BINARY="/home/asm/space space space/binary/dosemu"
OPTS="$FIRST $SECOND"
run_binary() {
$SUDO "$BINARY" $OPTS $@
}

run_binary "$INSTALL" "-I $STRING_I" "$@"

mqspi
()
Ответ на: комментарий от mqspi

шелл-инъекции - это когда строчка, которая должна пойти на eval, злоумышленно подправляется, чтобы получить в результате выполнения какой-нибудь непредусмотренный эффект? На сколько такая опасность реальна?

А то мучаюсь с подобной проблемой второй день. С помощью функции, с помощью массивов никак не выходит - дело в не фиксированном количестве параметров. Ну плюс в моих слабых скиллах скриптописателя, конечно. Но этот способ с evalом - единственный, который сработал.

Каковы возможные последствия?

indi
()
Ответ на: комментарий от dilmah

>не нужен тут eval

Обоснуйте.

Как из строки-единого блока сделать исполняемую строку с параметрами, сохранив внутренние двойные кавычки?

indi
()
Ответ на: комментарий от indi

да, это я влопрос не прочел.. Так выпьем же за то, чтобы такие вопросы перед нами не стояли.

dilmah ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.