8 ответов:
немного хаки, но это может быть самый короткий способ сделать то, что вы задали в вопросе (используйте трубу, чтобы принять
stdoutСecho "input"какstdinк другому процессу / команде:echo "input" | awk '{print "string"}'выход:
inputstringкакую именно задачу вы пытаетесь выполнить? Больше контекста может дать вам больше направления на лучшее решение.
обновление - отвечая на комментарий:
@NoamRoss
более идиоматические способ делать то, что вы хотите, то:
echo 'http://dx.doi.org/'"$(pbpaste)"The
$(...)синтаксис называется команду. Короче говоря, он выполняет команды, заключенные в новую подоболочку, и заменяет ееstdoutвыход, где$(...)был вызван в родительской оболочке. Таким образом, вы получите, в сущности:echo 'http://dx.doi.org/'"rsif.2012.0125"
использовать
cat -читать из stdin, и положил его в$(), чтобы выбросить пустую строкуecho input | COMMAND "$(cat -)string"однако почему бы вам не бросить трубу и не захватить выход левой стороны в замене команды:
COMMAND "$(echo input)string"
Я часто использую трубы, так что это, как правило, простой способ префикса и суффикса stdin:
echo "my standard in" | cat <(echo "prefix... ") <(cat -) <(echo " ...suffix") prefix... my standard in ...suffix
Вы можете сделать это с помощью sed:
seq 5 | sed '$a' seq 5 | sed '$ s/.*/ 6/'в вашем примере:
echo input | sed 's/.*/string/'
есть несколько способов сделать это, я лично думаю, что лучше всего:
echo input | while read line; do echo $line string; doneдругой может быть путем замены " $ "(конец символа строки) на" string " в команде sed:
echo input | sed "s/$/ string/g"почему я предпочитаю первое? Потому что он мгновенно связывает строку с stdin, например, с помощью следующей команды:
(echo input_one ;sleep 5; echo input_two ) | while read line; do echo $line string; doneвы получаете сразу первый вывод:
input_one stringа затем через 5 секунд вы получите другой Эхо:
input_two stringС другой стороны, используя "sed" сначала он выполняет все содержимое скобки, а затем он дает его "sed", поэтому команда
(echo input_one ;sleep 5; echo input_two ) | sed "s/$/ string/g"выводит обе строки
input_one string input_two stringчерез 5 секунд.
это может быть очень полезно в случаях, когда вы выполняете вызовы функций, которые занимают много времени для завершения и хотите постоянно обновляться о выходе функции.
Я знаю, что это на несколько лет позже, но вы можете сделать это с помощью опции xargs-J:
echo "input" | xargs -J "%" echo "%" "string"и так как это и размер, вы можете сделать это на нескольких строках файла сразу. Если файл "имена" имеет три строки, например:
Adam Bob Charlieвы могли бы сделать:
cat names | xargs -n 1 -J "%" echo "I like" "%" "because he is nice"
команда, которую вы опубликовали, будет использовать строку "input" в качестве потока stdin команды, который не будет давать результатов, которые вы ищете, если команда сначала не распечатает содержимое своего stdin, а затем распечатает свои аргументы командной строки.
похоже, что вы хотите сделать это ближе к команде замена.
http://www.gnu.org/software/bash/manual/html_node/Command-Substitution.html#Command-Substitution
с заменой команд вы можете иметь командную строку, как это:
echo input `COMMAND "string"`это сначала оценит команду с" строкой ‘ в качестве входных данных, а затем развернет результаты выполнения этой команды на строку, заменив то, что находится между символами"’.
работает:
seq -w 0 100 | xargs -I {} echo "string "{}будет генерировать строки типа:
string 000 string 001 string 002 string 003 string 004...
Comments