Bashでファイルコンテンツを複数のパラメータに渡す方法

Bashでファイルコンテンツを複数のパラメータに渡す方法

時間の経過とともに更新されるデータ(mydata)を含むファイルがあります。ファイルは次のようになります。

1 2 3

このファイルを使用して次のことをしたいと思います(基本的に各数値を別々の引数として扱います)。

myscript.sh 1 2 3

データは静的ではありませんが、時間の経過とともに更新されるため、次のコマンドを実行したいと思います。

myscript.sh "$(cat mydata)"

しかし、./myscript.sh:行1:1:コマンドが見つかりません。

どうすればいいですか?

ベストアンサー1

"$(cat mydata)"mydataファイルの内容から末尾の改行を引いた文字列を評価します。必要なのは、ファイル内のスペースで区切られた単語のリストです。したがって、今回は二重引用符の外でコマンド置換を使用してください。

myscript.sh $(cat mydata)

堅牢性を高めるには、ワイルドカードをオフにして列にmydataこれらの文字のいずれかが含まれている場合は、ファイル名\[*?パターンとして解釈されないようにしてください。設定したいかもしれません。IFS単語区切り文字が含まれていますが、デフォルト(ASCIIスペース)が必要なものでなければなりません。

(set -f; myscript.sh $(cat mydata))

あるいは、read組み込み機能を使用することもできます。これは最初の行を読み、残りは無視します(上記の内容に置き換えるだけですcathead -n 1

read -r one two three rest <mydata
myscript.sh "$one" "$two" "$three"

おすすめ記事