我想知道如何使用文件内容作为命令行参数,但是我正在努力学习语法。在BASH中使用文件内容作为命令行参数
说我有以下几点:
# cat > arglist
src/file1 dst/file1
src/file2 dst/file2
src/file3 dst/file3
如何使用每行的内容在arglist
文件作为参数的说,一个cp
命令?
我想知道如何使用文件内容作为命令行参数,但是我正在努力学习语法。在BASH中使用文件内容作为命令行参数
说我有以下几点:
# cat > arglist
src/file1 dst/file1
src/file2 dst/file2
src/file3 dst/file3
如何使用每行的内容在arglist
文件作为参数的说,一个cp
命令?
xargs的'-n'选项指定了多少个参数每个命令的使用方法:
$ xargs -n2 < arglist echo cp
cp src/file1 dst/file1
cp src/file2 dst/file2
cp src/file3 dst/file3
您可以使用管道(|):
cat file | echo
或输入重定向(<)
cat < file
xargs sh -c 'emacs "[email protected]" < /dev/tty' emacs
然后你可以使用awk来获取参数:
cat file | awk '{ print $1; }'
希望这有助于..
没有必要猫的awk片 – ghostdog74 2009-11-04 14:27:19
所有这些都做_something_,但他们都脱靶。 – Jamie 2009-11-04 15:37:50
'echo'不会从'stdin'中读取。除了'cat'不需要'echo'。此外,您不必重定向到“猫” - 这是可行的:'猫文件'。 – 2009-11-04 15:40:22
使用read
(这并不认为在arglist
文件名空格被转义):
while read src dst; do cp "$src" "$dst"; done < argslist
如果文件中的参数是按正确的顺序和空格的文件名被引用,那么这也将起作用:
while read args; do cp $args; done < argslist
+1比我的解决方案好得多:-D – NawaMan 2009-11-04 14:32:16
如果没有最后一个换行符,读取循环将“错过”读取最后一行。 – ghostdog74 2009-11-04 23:02:52
,如果你的目的只是为了CP中的thelist这些文件
$ awk '{cmd="cp "$0;system(cmd)}' file
锤子?钉子?当你使用shell进行操作时, – 2009-11-04 15:48:13
没有什么不同。 shell也在调用系统命令。 – ghostdog74 2009-11-04 23:02:12
使用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
没有必要将命令及其参数放入变量中。无论如何,你必须执行'$ Command'或'\'$ Command \''来使它工作。 – 2009-11-04 15:46:48
谢谢,我想念:D – NawaMan 2009-11-04 16:09:54
'<'如何工作? – Michelle 2013-07-03 09:23:05