Isso é o que é xargs . Ele pega uma lista de palavras (em branco ou em nova linha separadas, também compreendendo alguma forma de citar) em seu stdin e passa elas como argumentos para o (s) comando (s) que executa.
Aqui, se você quiser passar hello word como um argumento para curl , será necessário:
echo '"hello world"' | xargs curl...
Em que xargs entende os "..." como um mecanismo de cotação para evitar que o espaço entre hello e world seja tratado como um separador de argumentos. xargs também entende \ e '...' (de maneiras diferentes de shells POSIX).
Com o GNU xargs , você também pode especificar o delimitador. Por exemplo com:
echo hello world | xargs -d '\n' curl...
Apenas nova linha seria entendida como delimitadora (não em branco) e os mecanismos de cotação desativados.
Isso permite que você passe o conteúdo de cada linha (em oposição a cada palavra) como argumento para o comando.
Embora -d raramente seja suportado fora do GNU xargs , -0 , outra de suas extensões (para delimitar NULs e desativar o processamento de cotações) é mais amplamente suportada. Então você também pode fazer:
echo hello world | tr '\n' 'echo hello world | xargs -I@@ curl... @@
' | xargs -0 curl...
Se houver várias linhas de entrada, xargs passará todas elas como argumentos separados para curl . Se você quiser chamar um curl para cada linha, você pode adicionar uma opção -n 1 .
Você também pode usar:
echo '"hello world"' | xargs curl...
Isso chama um curl para cada linha, mas observe que os espaços em branco iniciais são eliminados e xargs ainda faz algum processamento de cotação, portanto, deve ser evitado para dados arbitrários.