4

次のように呼び出す必要のあるコマンドがあります。

command "complex argument"

この引数を渡してgnome-terminalを実行したい場合は、次のようになります。

gnome-terminal -e 'command "complex argument"'

ターミナルで複数のタブを開き、毎回異なる引数を使用してこのコマンドを実行したいと思います。これは次のように機能します。

gnome-terminal -e 'command "complex argument1"' --tab -e 'command "complex argument2"'

ただし、スクリプトを使用して実行する場合に問題が発生します。このスクリプトでは、サイクルから各タブのパラメーターを取得します(つまり、タブの数は可変です)。私の基本的な考え方は、単一の変数への引数を収集し、それをgnome-terminalに渡すことでした。しかし、ネストされた引用符で囲まれた引数をすべてそのままにして、これを行う方法がわかりません。すべてが1つの引数に圧縮されるか(私が呼び出す場合gnome-terminal "$args")、またはすべての空白によって分解されます(私が呼び出す場合gnome-terminal $args)。

このような複雑な引数をbashで構成する方法はありますか?または、代わりに、IPCメッセージをgnome-terminalに送信して、新しいタブを開いてコマンドを実行するように指示する方法はありますか?Konsoleでこれを実行できることはわかっていますが、今はgnome-terminalで実行したいと思います。

4

5 に答える 5

3

私はちょうどこれと同じ問題に遭遇し、それを修正しようとしているときにこの投稿に出くわしました。「複雑な引数」がシェル拡張に依存している場合は、コマンドをgnome-terminalに渡してシェルを開始する必要があると思います。例えば:

gnome-terminal \
--tab -e "sh -c 'command \"complex argument1\"'" \
--tab -e "sh -c 'command \"complex argument2\"'"

shの代わりにbashまたは他のシェルを開始できます。その他の例については、このスタック交換ポストを参照してください。

于 2012-02-01T21:07:27.227 に答える
2

投稿は約1年前なので、これが役立つかどうかはわかりませんが、BASHでgnome-terminalのスクリプトを作成するときに同様の問題が発生しました。私の答えはriachdesignに似ていますが、エスケープ文字が異なります。これが私がしたことです:

gnome-terminal -e bash -c "/home/someprogramtorun /home/user/'$dir'/filetopasstoprogram.txt"

$ dirの前後に一重引用符を追加しなかった場合(たとえば、$dirと'$ dir')、行は逐語的に実行されます(つまり、変数の内容が行に渡されません)。

うまくいけば、それがお役に立てば幸いです。

于 2012-07-03T21:16:36.243 に答える
0

ちなみに、このように、二重引用符(または、$ argsの前後で使用するものは何でも一重引用符)をエスケープする必要がある場合があります。('コマンド\"複雑な引数1"'--tab -e'コマンド\"複雑な引数2\"')

于 2011-07-07T15:30:21.363 に答える
0

まさにそれを行うこのRubyGemを見てください:https ://github.com/Achillefs/elscripto

于 2012-12-29T17:59:11.950 に答える
0

私は解決策を見つけました:配列。彼らは魔法を使うことができます。

# initial arguments
command=(gnome-terminal -e 'command "complex argument"')
...
# add extra arguments
command=("${command[@]}" --tab -e 'command "complex argument2"')
...
# execute command
"${command[@]}"
于 2013-04-08T21:06:38.827 に答える