eval はパイプコマンドとともに使用されます。

eval はパイプコマンドとともに使用されます。

1行に保存されたコマンドを含むfile.txtがあり(コマンドはコンソールで実行されたときに機能します)、shを使用して1行で実行したいと思います。

cat file.txt | eval

なくなったものありますか?どんな提案がありますか?

私のファイルに多くのコマンド(1行に1つずつ)が含まれていて、1つのコマンド(フル行)だけを実行したい場合はどうすればよいですか?私の最初の考えは次のとおりです。

head -n5 | tail -n1 | eval

ベストアンサー1

eval標準入力から対応するコマンド文字列を読みません。

eval "$(cat file.txt)"
# or easier, in ksh/bash/zsh
eval "$(<file.txt)"
# usually you cannot be sure that a command ends at the end of line 5
eval "$(head -n 5 file.txt)"

代わりに、コマンドがファイルにある場合は、eval標準.またはbash//を使用できますzshksh source

source ./file

(追加が重要です。そうしないと、./現在のディレクトリにあるものを考慮する前にinsourceを探しますfile。POSIXモードでは、inが見つからなくても現在のディレクトリは考慮されません。)$PATHfilebashfile$PATH

もちろん、ファイルの一部を選択しても機能しません。これは次の方法で行うことができます。

head -n 5 file.txt >commands.tmp
source ./commands.tmp

または(ksh93、zsh、bashを使用):

source <(head -n 5 file.txt)

おすすめ記事