在BASH中使用文件内容作为命令行参数

时间:2009-11-04 14:18:20

标签: bash redirect

我想知道如何使用文件的内容作为命令行参数,但我正在努力学习语法。

说我有以下内容:

# cat > arglist
src/file1 dst/file1
src/file2 dst/file2
src/file3 dst/file3

如何使用arglist文件中每行的内容作为参数来说明cp命令?

5 个答案:

答案 0 :(得分:8)

xargs的'-n'选项指定每个命令使用的参数数量:

$ xargs -n2 < arglist echo cp

cp src/file1 dst/file1
cp src/file2 dst/file2
cp src/file3 dst/file3

答案 1 :(得分:3)

使用read(这假设arglist中的文件名中的任何空格都已转义):

while read src dst; do cp "$src" "$dst"; done < argslist

如果文件中的参数顺序正确并且引用了带空格的文件名,那么这也可以起作用:

while read args; do cp $args; done < argslist

答案 2 :(得分:1)

您可以使用竖管(|):

cat file | echo

或输入重定向(&lt;)

cat < file

xargs

xargs sh -c 'emacs "$@" < /dev/tty' emacs

然后你可以用awk来获取参数:

cat file | awk '{ print $1; }'

希望这会有所帮助..

答案 3 :(得分:0)

如果您的目的只是为了列出该列表中的那些文件

$ awk '{cmd="cp "$0;system(cmd)}' file

答案 4 :(得分:0)

使用for循环,将IFS(内部字段分隔符)设置为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