2012-02-20 19 views
0

私は何かをチェックする小さなスクリプトを書いています。テストが成功したらスクリプト内からコマンドを実行したいです。そして私はコマンドをハードコードしたくないが、それをコールバックスクリプトのような引数として与える。bashの空白を含むコールバックスクリプト

私がテストするコマンドは/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

を:私はあなたがevalを使うべきだと思うI'm trying to put a command in a variable, but the complex cases always fail!

+0

ようなものになるだろうコマンドは、スクリプトの第2引数である場合、これは使用することはできますか? – Corubba

+0

はい。すべての引数は '$ @'と '$ {1 +" $ @ "}'に格納されているので、スクリプトでそれらを使用するのに最適です。 –

+0

私は 'script.sh otherarg1 otherarg2 callback'のようなものを意味しました – Corubba

1

配列を使用する必要があります。

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

:私はあなたがこのようなスクリプトを書く示唆

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

はあなたの問題を解決する方法については、以下のリンクを参照してください。それをこのように呼びます:

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

コールバックがすべてのオプションの後に指定されるようにeval "$1"または再設計を試してみてください - 一般的な構成はscript.bash -options arguments etc -- /usr/bin/xmessage -buttons "button a","button b" some text to test

+0

が必要です再設計の際にコールバックを呼び出す方法? – Corubba

+0

基本的に先行する引数を 'シフト 'してから、' '$ @" 'を実行します。これは基本的に@Adeの返答に相当します。 – tripleee

関連する問題