Как объединить и передать результаты из двух разных команд в одиночную команду?

sudo aptitude install ~nlibxerces

или

apt-cache search --names-only xerces

Эти инструкции устарели. Это не libxerces27 больше.

28
задан 8 May 2012 в 00:05

3 ответа

Поскольку wc принимает путь к файлу как входной, вы также можете использовать замену процесса:

wc -l <(cat wordlist.txt; ls ~/folder/*)

Это примерно эквивалентно:

echo wordlist.txt > temp
ls ~/folder/* >> temp
wc -l temp

Обратите внимание, что также возвращает содержимое подкаталогов, если они есть (из-за расширения glob). Если вы просто хотите перечислить содержимое ~/folder, просто используйте ls ~/folder.

8
ответ дан 25 May 2018 в 11:44
  • 1
    [F1] был всего лишь составленным примером, я на самом деле собираю его в нечто более сложное, у которого нет этой опции. – David Oneill 8 May 2012 в 00:12
  • 2
    @DavidOneill Ну, поскольку cat принимает аргумент файла, вы можете использовать cat <(cat wordlist.txt; ls wordlist.txt) | wc -l и даже cat wordlist.txt <(ls wordlist.txt) | wc -l. Это, конечно, очень уродливо, но это демонстрирует бесконечные возможности с инструментами командной строки. – Lekensteyn 8 May 2012 в 00:14
  • 3
    Ах, я понимаю, что вы имеете в виду. Благодаря! – David Oneill 8 May 2012 в 00:23
  • 4
    @DavidOneill Правильно, я исправил это сейчас, спасибо. – Lekensteyn 8 May 2012 в 00:25
  • 5
    Вы хотите ls ~/folder/, чтобы, если ~/folder является символической ссылкой ls, список содержимого цели вместо самой ссылки. Кстати, перед всеми командами ls следует -1, чтобы был напечатан один файл на строку, а wc -l - допустимый способ подсчета файлов. – pablomme 8 May 2012 в 01:28

Я задавал себе тот же вопрос и в итоге написал короткий скрипт.

magicalUnionThing (Я называю это append):

#!/bin/sh
cat /dev/stdin
$*

Сделайте это script исполняемый файл

chmod +x ./magicalUnionThing

Теперь вы выполняете

cat wordlist.txt |./magicalUnionThing ls ~/folder/* | wc -l

Что он делает:

Отправляет стандартный ввод в стандартный вывод. Выполнить аргумент. $* возвращает все аргументы в виде строки. Результат этой команды по умолчанию выводится на стандартный вывод сценария.

Таким образом, stdout of magicalUnionThing будет его stdin + stdout команды, которая передается как аргумент.

Есть, конечно, более простые способы, как и другие ответы. Возможно, эта альтернатива может быть полезна в некоторых случаях.

0
ответ дан 25 May 2018 в 11:44

Я задавал себе тот же вопрос и в итоге написал короткий скрипт.

magicalUnionThing (Я называю его append):

#!/bin/sh
cat /dev/stdin
$*

Сделайте это скрипт исполняемый

chmod +x ./magicalUnionThing

Теперь вы делаете

cat wordlist.txt |./magicalUnionThing ls ~/folder/* | wc -l

Что он делает:

  • Отправляет стандартный ввод на стандартный вывод
  • Выполнить аргумент. $* возвращает все аргументы в виде строки. Вывод этой команды по умолчанию идет по стандартным выводам скрипта.

Таким образом, stdout magicalUnionThing будет его stdin + stdout команды, которая передается как аргумент.

Есть, конечно, более простые способы, как и другие ответы. Возможно, эта альтернатива может быть полезна в некоторых случаях.

1
ответ дан 31 July 2018 в 10:32

Другие вопросы по тегам:

Похожие вопросы: