我想知道如何使用文件內容作爲命令行參數,但是我正在努力學習語法。在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