Как связать стандартный ввод со строкой, как это?
echo "input" | COMMAND "string"
и получить
inputstring
Немного хакерский, но это может быть самый короткий способ сделать то, что вы задали в вопросе (используйте канал для принятия stdout
от echo "input"
as stdin
к другому процессу / команде:
echo "input" | awk '{print $1"string"}'
Вывод:
inputstring
Какую задачу вы конкретно пытаетесь выполнить? Более подробный контекст поможет вам найти лучшее решение.
Обновление - ответ на комментарий:
@NoamRoss
Тогда более идиоматический способ сделать то, что вы хотите:
echo 'http://dx.doi.org/'"$(pbpaste)"
$(...)
Синтаксис называется подстановка команд . Короче говоря, он выполняет команды, заключенные в новую подоболочку, и заменяет свой stdout
вывод там, где $(...)
был вызван в родительской оболочке. Таким образом, вы получите:
echo 'http://dx.doi.org/'"rsif.2012.0125"
pbpaste | awk '{print "http://dx.doi.org/"$1}'
и получаюhttp://dx.doi.org/10.1098/rsif.2012.0125
'{print $0"string"}'
схватил все это.string
к каждой строке. Попробуйecho 'input'\n'another line' | awk '{print $0"string"}'
.используйте
cat -
для чтения из stdin и вставьте его,$()
чтобы выбросить завершающую новую строкуОднако почему бы вам не отбросить трубу и не захватить вывод левой части подстановкой команды:
источник
Я часто использую каналы, поэтому это простой способ добавить префикс и суффикс stdin:
источник
pipe
иcat
echo "my standard in" | echo -e "prefix\n$(cat -)\nsuffix"
:? Или, более читаемая версия:echo "my standard in" | printf "%s\n%s\n%s\n" "prefix" "$(cat -)" "suffix"
Вы можете сделать это с помощью sed:
В вашем примере:
источник
Есть несколько способов добиться этого, я лично считаю, что лучший из них:
Другой может быть заменой «$» (символ конца строки) на «строку» в команде sed:
Почему я предпочитаю первое? Потому что он мгновенно объединяет строку со стандартным вводом, например, с помощью следующей команды:
вы сразу получите первый вывод:
а затем через 5 секунд вы получите другое эхо:
С другой стороны, при использовании "sed" сначала выполняется все содержимое круглой скобки, а затем оно передается в "sed", поэтому команда
выведет обе строки
через 5 секунд.
Это может быть очень полезно в тех случаях, когда вы выполняете вызовы функций, выполнение которых занимает много времени, и вы хотите постоянно получать обновления о выходе функции.
источник
Я знаю, что это опоздание на несколько лет, но вы можете сделать это с помощью опции xargs -J:
А так как это xargs, вы можете сделать это на нескольких строках файла одновременно. Если в файле name есть три строки, например:
Вы могли сделать:
источник
-J
не кажется стандартным / обычным. В Linux (гдеxargs
это частьGNU findutils
) я получаю сообщение об ошибке: Наxargs: invalid option -- 'J'
какой это системе?-J
для версии для Mac. Для Linux-I
выполняет ту же функцию.cat names | xargs -I% echo "I like % because he is nice"
IOW: нет необходимости в-n 1
( в любом случаеxargs
вызываетecho
один раз для каждой строки ввода, поскольку-I
подразумевает-L1
) Кроме того, все отдельные кавычки аргументов кажутся избыточными.Опубликованная вами команда примет строку «input» и будет использовать ее как поток stdin КОМАНДЫ, который не даст результатов, которые вы ищете, если только COMMAND сначала не распечатает содержимое своего stdin, а затем распечатает аргументы командной строки.
Похоже, то, что вы хотите сделать, ближе к подстановке команд.
http://www.gnu.org/software/bash/manual/html_node/Command-Substitution.html#Command-Substitution
При подстановке команд вы можете получить такую командную строку:
Это сначала оценит КОМАНДУ с "строкой" в качестве входных данных, а затем развернет результаты выполнения этой команды на строку, заменив то, что находится между символами '' '.
источник
echo input $(COMMAND "string")
, а не обратные кавычки. Всем удачи.кот будет моим выбором:
ls | cat - <(echo new line)
источник
Также работает:
Будет генерировать такие строки, как:
...
источник