Szukaj…


Wprowadzenie

Istnieje kilka sposobów łączenia poleceń. Proste takie jak tylko; lub bardziej złożone, takie jak łańcuchy logiczne, które działają w zależności od pewnych warunków. Trzeci to polecenia potokowe, które skutecznie przekazują dane wyjściowe do następnego polecenia w łańcuchu.

Liczenie występowania wzoru tekstu

Użycie potoku powoduje, że wyjście polecenia staje się wejściem następnego.

ls -1 | grep -c ".conf"

W takim przypadku wyjście polecenia ls jest używane jako dane wejściowe polecenia grep. Wynikiem będzie liczba plików, które zawierają „.conf” w nazwie.

Można to wykorzystać do tworzenia łańcuchów kolejnych poleceń tak długo, jak to konieczne:

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

przenieś wyjściowy plik cmd do pliku użytkownika

Często chce się pokazać wynik polecenia wykonywanego przez root innym użytkownikom. Polecenie tee pozwala łatwo napisać plik z uprawnieniami użytkownika z polecenia działającego jako root:

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

Tylko jeśli ifconfig działa jako root.

logiczne łączenie łańcuchów poleceń za pomocą && i ||

&& łączy dwa polecenia. Drugi działa tylko wtedy, gdy pierwszy zakończy się sukcesem. || łączy dwa polecenia. Ale drugi działa tylko wtedy, gdy pierwszy kończy się niepowodzeniem.

[ 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 || ....

szeregowe łączenie poleceń średnikiem

Średnik oddziela tylko dwa polecenia.

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

łączenie poleceń za pomocą |

The | pobiera dane wyjściowe lewego polecenia i potokuje je jako dane wejściowe prawego polecenia. Pamiętaj, że odbywa się to w podpowłoce. Dlatego nie można ustawiać wartości zmiennych procesu wywołującego za pomocą potoku.

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
Licencjonowany na podstawie CC BY-SA 3.0
Nie związany z Stack Overflow