2013-10-03 50 views
0

如何使用EOF作爲xargs中的分隔符,以便讀取整個文件?xargs - 使用EOF作爲分隔符

E.g.

cat foo.py | xargs -d EOF -I % python -c %

我知道還有其他方法來獲得上面的例子中工作,但我有興趣在學習如何做同樣的xargs的。

+0

你能詳細說明你試圖達到的是什麼嗎? – devnull

回答

3

由於命令行參數不能包含空字節,因此您的問題基本上預先假設您的輸入不包含空字節。因此,最簡單的方法是使用空字節作爲分隔符,從而保證將整個輸入視爲單個項目。

要做到這一點,使用--null-0選項:

cat foo.py | xargs --null -I % python -c % 

或者,更簡潔:

xargs -0 python -c < foo.py 

這麼說,我無法想象這是什麼有用的。如果你知道你只會有一個輸入項目,那麼爲什麼要使用xargs呢?爲什麼不直接寫

python -c "$(< foo.py)" 

+0

是的,我知道替代品 - 我只是想知道是否可以使用xargs來實現。謝謝! – jeffreyveon

1

對於xargs來讀取整個文件並將其轉換爲單個參數將是一種無用的行爲。

你想做些什麼:

# replace % with the contents of foo.py and pass as an argument 
cat foo.py | xargs -d EOF -I % python -c % 

可以這樣做:

# pass contents of foo.py as a single argument 
python -c "$(cat foo.py)" 

,但有什麼意義,因爲你可以這樣做:

python foo.py