Řešení 1:
GNU xargs (výchozí v systému Linux; nainstalujte findutils
z MacPorts na OS X jej získat) podporuje -d
což vám umožní zadat vlastní oddělovač pro vstup, takže můžete udělat
ls *foo | xargs -d '\n' -P4 foo
Řešení 2:
Něco ve smyslu
alias myxargs='perl -p -e "s/\n/\0/;" | xargs -0'
cat nonzerofile | myxargs command
by mělo fungovat.
Řešení 3:
S Bash se obecně raději vyhýbám xargům pro cokoli, co je nejméně složité, ve prospěch smyček při čtení. Pro vaši otázku while read -ar LINE; do ...; done
dělá tuto úlohu (nezapomeňte použít syntaxi pole s LINE, např. ${LINE[@]}
pro celou řadu). To nevyžaduje žádné triky:ve výchozím nastavení používá čtení pouze \n
jako znak ukončení řádku.
Měl bych poslat otázku na SO o výhodách a nevýhodách xargs vs. smyčky při čtení... hotovo!
Řešení 4:
$ echo "1\n2 3\n4 5 6" | xargs -L1 echo "#"
# 1
# 2 3
# 4 5 6