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 "$@"