変数内部コマンド

変数内部コマンド

ファイルから読み取ったコマンドラインで変数を入力して実行したいです。単一のコマンドであれば問題ありません。 | を使用すると機能しません。助けが必要ですか? ? ?ありがとう

$ f="ls -1"
$ $f
a
a0
a1
a2
a3
b1
cfg
cfile
dfile
e
fcorreo.txt
log
logs
work
$ f="ls -1 | tail -1"
$ $f
ls: cannot access |: No such file or directory
ls: cannot access tail: No such file or directory
$ f='ls -1 | tail -1'
$ $f
ls: cannot access |: No such file or directory
ls: cannot access tail: No such file or directory
$ echo $f
ls -1 | tail -1

ベストアンサー1

問題は、パイプ(|)が2つの異なるコマンドを接続するシェルで実行される「メタ」コマンドであることです。両方のコマンド(および)ls -1 | tail -1を実行し、シェル構成()を使用して両方のコマンドに接続する場合も同様です。 (だからタイトルはlstail|変数内部コマンドあなたの質問が実際にあるので正しくありません。多くの種類内のコマンド一つ変える)

とにかく解決策は、シェルを使用してコマンドを解析/実行することです。

f="ls -1 | tail -1"
sh -c "${f}"

evalまたは、新しいシェルプロセスをフォークしなくても機能することを使用できます。

f="ls -1 | tail -1"
eval "${f}"

おすすめ記事