2012-02-20 2 views
0

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

Команда I, которая тестируется, равна /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 он жалуется, что не смог найти файл. Кто-нибудь получил идеи по исправлению поведения с пространством?

ответ

1

Я предлагаю вам написать сценарий, как это:

#!/bin/bash 
echo ${1+"[email protected]"} 
${1+"[email protected]"} 

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

/path/to/script.bash /usr/bin/xmessage -buttons "button a","button b" some text to test 
+0

Может ли это быть использовано, если команда является вторым аргументом сценария? – Corubba

+0

Да. Все аргументы хранятся в '$ @' и '$ {1 +" $ @ "}' - это отличный способ использовать их в скрипте. –

+0

Я имел в виду нечто вроде 'script.sh otherarg1 otherarg2 callback' – Corubba

1

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

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

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

+0

Как вызвать обратный вызов в случае реорганизации? – Corubba

+0

В основном 'shift' прочь главные аргументы, а затем запустить' '$ @" ', что в основном соответствует тому, на что отвечает @ Ade. – tripleee