時間の経過とともに更新されるデータ(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
組み込み機能を使用することもできます。これは最初の行を読み、残りは無視します(上記の内容に置き換えるだけですcat
)head -n 1
。
read -r one two three rest <mydata
myscript.sh "$one" "$two" "$three"