2013-03-15 4 views
6

Как передать глобальную переменную скрипта команде xargs? Я попробовал это так:bash: переменная xargs, проходящая переменная

TEST=hallo2 
echo "hallo" | xargs sh -c 'echo passed=$1 test=$TEST' sh 

Выход:

passed=hallo test= 

Я знаю, что я мог бы использовать {} маркер, но мне нужно сделать это таким образом!

Я использую bash.

+3

попробовать с помощью 'экспорта TEST = hallo2' –

+0

@ CarlosCampderrós: ​​добавьте это как ответ. Это самый безопасный, самый правильный подход. – chepner

ответ

8

Возьмите переменную $TEST из цитат:

TEST=hallo2 
echo "hallo" | xargs sh -c 'echo passed=$1 test='$TEST sh 
+4

Если вы придерживаетесь этого подхода, вам следует сделать двойную цитату '$ TEST', чтобы защитить от него пробелы. – chepner

6

Добавлено в ответ, как @ chepner предложил.

export переменная TEST:

export TEST=hallo2 
echo "hallo" | xargs sh -c 'echo passed=$1 test=$TEST' sh 
-5

С GNU Parallel вы можете избежать некоторых из процитировать:

TEST=hallo2 
echo "hallo" | parallel echo passed={} test=$TEST 

GNU Parallel существует как пакет для большинства дистрибутивов и рекомендуется использовать обычные менеджер пакетов для установки. Но если нет пакета для вашей системы, она по-прежнему занимает буквально 10 секунд, чтобы установить GNU Parallel:

wget pi.dk/3 -qO - | sh -x 

Смотреть интро видео, чтобы узнать больше: https://www.youtube.com/playlist?list=PL284C9FF2488BC6D1

+8

Я настоятельно рекомендую не передавать какой-либо скрипт из случайного сайта в ответ на переполнение стека, в вашу оболочку. – eggonlegs

Смежные вопросы