ファイルの内容をコマンドライン引数として使用する方法を知りたいが、構文に苦しんでいる。ファイル内容をBASHのコマンドライン引数として使用する
は、私は次のことを持って言う:
# cat > arglist
src/file1 dst/file1
src/file2 dst/file2
src/file3 dst/file3
は、どのように私は言うの引数、cp
コマンドとしてarglist
ファイル内の各行の内容を使用できますか?
ファイルの内容をコマンドライン引数として使用する方法を知りたいが、構文に苦しんでいる。ファイル内容をBASHのコマンドライン引数として使用する
は、私は次のことを持って言う:
# cat > arglist
src/file1 dst/file1
src/file2 dst/file2
src/file3 dst/file3
は、どのように私は言うの引数、cp
コマンドとしてarglist
ファイル内の各行の内容を使用できますか?
xargsの-nオプションは、コマンドごとに使用:あなたの目的はthelistにそれらのファイルをCPにちょうどある
$ xargs -n2 < arglist echo cp
cp src/file1 dst/file1
cp src/file2 dst/file2
cp src/file3 dst/file3
あなたがパイプを使用することができます(|):次に、あなたが引数を取得するためにはawkを使用することができ
cat file | echo
または入力リダイレクション(<)
cat < file
またはxargs
xargs sh -c 'emacs "[email protected]" < /dev/tty' emacs
を:
(これはarglist
内のファイル名にスペースがエスケープされていることを前提としていない)
read
を使用して、このことができます
cat file | awk '{ print $1; }'
・ホープ..
不要に設定IFS
(内部フィールドセパレータ)とfor
ループawkの作品のための猫 –
ghostdog74
これらのすべては_何かをするが、それらはすべて目標外である。 – Jamie
'echo'は' stdin'から読み込みません。 「cat」には 'echo'は必要ありません。また、 'cat'にリダイレクトする必要はありません。これは' cat file'です。 –
:
while read src dst; do cp "$src" "$dst"; done < argslist
ファイル内の引数が正しい順序である場合ファイル名にスペースがある場合は、次のようにもなります。
while read args; do cp $args; done < argslist
+1私の解決策よりもはるかに優れています.-D – NawaMan
最後の改行がない場合、読み込みループが最後の行を読み逃してしまいます。 – ghostdog74
場合
$ awk '{cmd="cp "$0;system(cmd)}' file
ハンマー?釘? –
シェルで行うときに違いはありません。シェルもシステムコマンドを呼び出しています。 – ghostdog74
使用new line
OldIFS=$IFS # Save IFS
$IFS=$'\n' # Set IFS to new line
for EachLine in `cat arglist"`; do
Command="cp $Each"
`$Command`;
done
IFS=$OldIFS
コマンドとその引数を変数に入れる必要はありません。とにかく、それを動作させるには、 '$ Command'や' \ '$ Command \' 'を実行しなければなりません。 –
ありがとう、私はそれを逃す:D – NawaMan
'<'はどのように動作しますか? – Michelle