我想知道如何使用文件的内容作为命令行参数,但我正在努力学习语法。
说我有以下内容:
# cat > arglist
src/file1 dst/file1
src/file2 dst/file2
src/file3 dst/file3
如何使用arglist
文件中每行的内容作为参数来说明cp
命令?
答案 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 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