他のシェルを介してすべてのコマンドライン引数をどのように実行できますか?

他のシェルを介してすべてのコマンドライン引数をどのように実行できますか?

tempenv次のように使用したいスクリプトがあります。

$ tempenv ls -l

tempenv次のようになります。

#!/bin/bash
setarch ... /bin/bash -c $@

しかし、期待どおりに動作しません。代わりに、最初の引数だけを実行し、他の引数は無視します。tempenv ls -lのように走っていましたtempenv ls

ベストアンサー1

man bash:

-c
-cオプションがある場合は、オプションではなく最初の引数command_stringからコマンドを読み取ります。 command_stringの後に引数がある場合、最初の引数は$ 0に割り当てられ、残りの引数は位置引数に割り当てられます。 $ 0の指定は、警告メッセージとエラーメッセージに使用されるシェルの名前を設定します。

tempenv () { bash -c 'set -x; : "$@"' foo "$@"; }

tempenv ls -l 'foo bar'
+ : ls -l 'foo bar'

したがって、これはあなたに役立ちます:

#!/bin/bash
setarch ... /bin/bash -c '"$@"' tempenv-subshell "$@"

おすすめ記事