在BASH中将文件内容用作命令行参数
我想知道如何使用文件的内容作为命令行参数,但在语法方面遇到了困难 假设我有以下几点:在BASH中将文件内容用作命令行参数,bash,redirect,Bash,Redirect,我想知道如何使用文件的内容作为命令行参数,但在语法方面遇到了困难 假设我有以下几点: # cat > arglist src/file1 dst/file1 src/file2 dst/file2 src/file3 dst/file3 如何使用arglist文件中每一行的内容作为参数来表示cp命令?您可以使用管道(|): 或输入重定向(Using)(这假定arglist中的文件名中的任何空格都被转义): 读取src dst时执行cp“$src”“$dst”已完成 如果文件中的参数顺序
# cat > arglist
src/file1 dst/file1
src/file2 dst/file2
src/file3 dst/file3
如何使用arglist
文件中每一行的内容作为参数来表示cp
命令?您可以使用管道(|):
或输入重定向(Using)(这假定arglist
中的文件名中的任何空格都被转义):
读取src dst时执行cp“$src”“$dst”已完成
如果文件中的参数顺序正确,并且引用了带空格的文件名,则这也将起作用:
while read args; do cp $args; done < argslist
读取参数时;执行cp$args;完成
xargs的'-n'选项指定每个命令要使用多少个参数:
$ xargs -n2 < arglist echo cp
cp src/file1 dst/file1
cp src/file2 dst/file2
cp src/file3 dst/file3
$xargs-n2
如果您的目的只是对列表中的文件进行cp
$ awk '{cmd="cp "$0;system(cmd)}' file
使用
进行循环,将IFS
(内部字段分隔符)设置为新行
OldIFS=$IFS # Save IFS
$IFS=$'\n' # Set IFS to new line
for EachLine in `cat arglist"`; do
Command="cp $Each"
`$Command`;
done
IFS=$OldIFS
所有这些都做了些事情,但都偏离了目标。echo
不读取stdin
。此外cat
不需要echo
。此外,你不必重定向到cat
-这是有效的:cat文件
。是的,我知道,一开始我不太明白他想要什么。我知道了输出类似于“ls”,我的意思是在cols上使用更少的行。这就是为什么我谈到shell重定向。(英语不是我的第一语言,对不起:))没有必要将命令及其参数放入变量中。无论如何,您必须执行$Command
或`$Command`
,才能使其正常工作。使用shell时没有什么不同。shell也在调用系统命令。如果没有最后一行换行符,则while read循环将“错过”读取最后一行。
while read src dst; do cp "$src" "$dst"; done < argslist
while read args; do cp $args; done < argslist
$ xargs -n2 < arglist echo cp
cp src/file1 dst/file1
cp src/file2 dst/file2
cp src/file3 dst/file3
$ awk '{cmd="cp "$0;system(cmd)}' file
OldIFS=$IFS # Save IFS
$IFS=$'\n' # Set IFS to new line
for EachLine in `cat arglist"`; do
Command="cp $Each"
`$Command`;
done
IFS=$OldIFS