скрипт обратного вызова с пробелом в bash - PullRequest
0 голосов
/ 20 февраля 2012

Я написал небольшой скрипт, который что-то проверяет, и я хочу, чтобы команда выполнялась из скрипта, если тест прошел успешно.И я не хочу жестко кодировать команду, но приводить ее в качестве аргумента, как скрипт обратного вызова.

Команда, с которой я тестирую, - /usr/bin/xmessage -buttons "button a","button b" some text to test.Запуск его в автономном терминале работает нормально, для последнего текста кавычки не нужны.

Сценарий выглядит так:

#!/bin/bash
echo "$1"
$1

Но при запуске /path/to/script.bash '/usr/bin/xmessage -buttons "button a","button b" some text to test' он выглядит как this , хотя эхо выглядит правильно.

При использовании "$1" вместо $1 он жалуется, что не может найти файл.У кого-нибудь есть идеи, как исправить поведение с пробелом?

Ответы [ 4 ]

1 голос
/ 20 февраля 2012

Попробуйте eval "$1" или измените дизайн так, чтобы обратный вызов указывался после всех опций - общее расположение будет примерно таким: script.bash -options arguments etc -- /usr/bin/xmessage -buttons "button a","button b" some text to test

1 голос
/ 20 февраля 2012

Я думаю, вы должны использовать eval:

#!/bin/bash
echo "$1"
eval $1
1 голос
/ 20 февраля 2012

Предлагаю вам написать скрипт так:

#!/bin/bash
echo ${1+"$@"}
${1+"$@"}

И назовите это так:

/path/to/script.bash /usr/bin/xmessage -buttons "button a","button b" some text to test
1 голос
/ 20 февраля 2012

Вам нужно будет использовать массив.

Смотрите следующую ссылку, как решить вашу проблему: Я пытаюсь поместить команду в переменную, но сложные случаи всегда терпят неудачу!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...