Поиск…


Вступление

Есть несколько способов объединить команды вместе. Простые, как просто; или более сложные, такие как логические цепи, которые работают в зависимости от некоторых условий. Третий - это команды трубопроводов, которые эффективно передают выходные данные следующей команде в цепочке.

Подсчет текста

Использование канала делает вывод команды входным для следующего.

ls -1 | grep -c ".conf"

В этом случае вывод команды ls используется как вход команды grep. Результатом будет количество файлов, содержащих «.conf» в их имени.

Это можно использовать для конструирования цепочек последующих команд до тех пор, пока это необходимо:

ls -1 | grep ".conf" | grep -c .

передать выходной файл cmd в файл пользователя

Часто хочется показать результат команды, выполняемой root для других пользователей. Команда tee позволяет легко записывать файл с пользовательским perms из команды, выполняемой с правами root:

su -c ifconfig | tee ~/results-of-ifconfig.txt

Только ifconfig работает от имени root.

логическая цепочка команд с && и ||

&& объединяет две команды. Второй работает только в том случае, если первый из них успешно завершает работу. || цепи две команды. Но второй работает только в том случае, если первый из них выходит с ошибкой.

[ a = b  ] && echo "yes" || echo "no"

# if you want to run more commands within a logical chain, use curly braces
# which designate a block of commands 
# They do need a ; before closing bracket so bash can diffentiate from other uses
# of curly braces
[ a = b ] && { echo "let me see." 
               echo "hmmm, yes, i think it is true" ; } \
          || { echo "as i am in the negation i think " 
               echo "this is false. a is a not b."  ; }
# mind the use of line continuation sign \
# only needed to chain yes block with || ....

последовательная цепочка команд с точкой с запятой

Точка с запятой разделяет только две команды.

echo "i am first" ; echo "i am second" ; echo " i am third"

команды цепочки с |

| выводит результат левой команды и передает его в качестве входной правой команды. Разумеется, это делается в подоболочке. Следовательно, вы не можете устанавливать значения варов вызывающего процесса с трубой.

find . -type f -a -iname '*.mp3'  | \
       while read filename; do
             mute --noise "$filename"
       done 


Modified text is an extract of the original Stack Overflow Documentation
Лицензировано согласно CC BY-SA 3.0
Не связан с Stack Overflow