ファイルから読み取ったコマンドラインで変数を入力して実行したいです。単一のコマンドであれば問題ありません。 | を使用すると機能しません。助けが必要ですか? ? ?ありがとう
$ 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
を実行し、シェル構成()を使用して両方のコマンドに接続する場合も同様です。 (だからタイトルはls
tail
|
ㅏ変数内部コマンドあなたの質問が実際にあるので正しくありません。多くの種類内のコマンド一つ変える)
とにかく解決策は、シェルを使用してコマンドを解析/実行することです。
f="ls -1 | tail -1"
sh -c "${f}"
eval
または、新しいシェルプロセスをフォークしなくても機能することを使用できます。
f="ls -1 | tail -1"
eval "${f}"
答え2
次の機能を使用できます。
f() { ls -1 | tail -1; }
例えば。
user@host $ f() { ls -1 | tail -1; }
user@host $ f
test.txt