コマンドの代わりにファイルに渡されるスペースを持つシェル引数

コマンドの代わりにファイルに渡されるスペースを持つシェル引数

私はこれを読んだQ&Aしかし、常に引数をファイルとして扱うようです。

diff <(ls old) <(ls new)コマンドを次から変更したいと思います。このリンク少し冗長ではありますが、2つの引数を取る関数です。

私はこれを引数の置き換えで試しました。

d2c(){
        diff <($1) <($2)
}

d2c "objdump -d foo1" "objdump -d foo2"その後、プログラムを実行します。d2c:1: no such file or directory: objdump -d foo1

そして先入選出、上記の問題はまだ存在します。

Q:「objdump -d foo1」などの引数を渡してコマンドで実行するにはどうすればよいですか?

答え1

実行するコマンドの名前ではなくシェルコードとして$1解釈したいように見えるので、次のものが必要です。$2

d2c() {
  diff <(eval " $1") <(eval " $2")
}

(名前が始まるコマンドの問題を回避するには、先行スペースに注意してください-。)

d2cまた、コマンドインジェクションの脆弱性が発生するリスクを排除するには、これらのコードを渡すときに二重引用符ではなく一重引用符を使用することをお勧めします。

d2c 'echo "$var1"' 'echo "$var2"; echo "$var3"'

いいえ

d2c "echo $var1" "echo $var2; echo $var3"

例えば。

関連情報