forloopオブジェクトに対してbashコマンドを実行しようとしていますが、forloopオブジェクトを使用する代わりにファイルを見つけようとします。
例:
入力ファイルには、次の形式の行が含まれています。user:password
for item in $(cat myItems);do
USER = cat $item | cut -d ":" -f1
PASS = cat $item | cut -d ":" -f2
done
結果は$ itemファイルが見つからないことです。
私も試しました
for item in $(cat myItems);do
USER = $(cat $item | cut -d ":" -f1)
PASS = $(cat $item | cut -d ":" -f2)
done
答え1
ファイルの各行に対していくつかのコマンドを実行する必要がある場合は、次のように書くことができます。
while IFS=: read -r user password rest_ignored; do
something with "$user" and "$password"
done < myItems
cat
var=value
は、割り当て構文の周囲にスペースを入れずにファイルをリンクするコマンドです=
。$(...)
改行でコマンド出力を分割することは可能ですが、正しく設定して$IFS
ワイルドカードを無効にした場合にのみ可能です。
答え2
これはあなたが望むことを達成し、もともと望んでいたスクリプトアプローチを維持するようです。
$ cat myItems
user:pass
user2:pass2
$ for item in $(cat myItems);do
USER=$(echo $item | cut -d ":" -f1)
PASS=$(echo $item | cut -d ":" -f2)
echo user $USER pass $PASS
done
user user pass pass
user user2 pass pass2
$