Podstawianie procesu forma komunikacji między procesami, która umożliwia wejście lub wyjście polecenia na pojawienie się jako plik (na przykład: `<(cmd)` lub `> (cmd)`).
Zastanawiałem się, jak zrozumieć następujące kwestie: Przełożenie standardowej komendy na standardową kolejną jest potężną techniką. Ale co, jeśli chcesz przesłać standardowe sekwencje wielu poleceń? W tym miejscu pojawia się podstawienie procesu. Innymi słowy, czy podstawienie procesu może zrobić wszystko, co może zrobić potok? Co może zrobić proces podstawiania, ale potok …
Próbuję zrozumieć nazwane potoki w kontekście tego konkretnego przykładu. Wpisuję <(ls -l)w moim terminalu i uzyskać wyjście jako, bash: /dev/fd/63: Permission denied. Po wpisaniu cat <(ls -l)mogłem zobaczyć zawartość katalogu. Jeśli mam wymienić catz echo, myślę uzyskać nazwę terminala (lub nie?). echo <(ls -l)daje wynik jako /dev/fd/63. Również ten przykładowy …
Dzisiaj uczę się czegoś o fifo w tym artykule: Wprowadzenie do nazwanych potoków , o którym wspomniano cat <(ls -l). Zrobiłem kilka eksperymentów, używając sort < (ls -l), który wyskakuje błąd: -bash: syntax error near unexpected token `('` Potem odkryłem, że źle wprowadziłem dodatkowe miejsce w poleceniu. Ale dlaczego to …
Czasami podstawienie procesu nie będzie działać zgodnie z oczekiwaniami. Oto przykład: Wkład: gcc <(echo 'int main(){return 0;}') Wydajność: /dev/fd/63: file not recognized: Illegal seek collect2: error: ld returned 1 exit status Wkład: Ale działa zgodnie z oczekiwaniami, gdy jest używany z innym poleceniem: grep main <(echo 'int main(){return 0;}') Wydajność: …
Niektóre powłoki bashobsługują proces podstawiania, który jest sposobem prezentacji wyników procesu w postaci pliku: $ diff <(sort file1) <(sort file2) Jednak ten konstrukt nie jest POSIX i dlatego nie jest przenośny. Jak można zastąpić proces w sposób przyjazny dla POSIX (tj. Taki, który działa /bin/sh) ? uwaga: pytanie nie pyta, …
Chcę, aby moje skrypty powłoki kończyły się niepowodzeniem, ilekroć wykonanie polecenia nimi nie powiedzie się. Zazwyczaj robię to z: set -e set -o pipefail (zazwyczaj dodaję set -uteż) Chodzi o to, że żadne z powyższych nie działa z podstawieniem procesu. Ten kod wypisuje „ok” i kończy z kodem powrotu = …
Spodziewałem się cat <(cat)i cat | catzrobię to samo: skopiuj wiersze ze standardowego wejścia na standardowe wyjście. Zrozumiałem, że oba wykonałyby a catw podpowłoce, przekierowały catstdout podpowłoki do tymczasowej nazwanej potoki, a następnie wykonały inną catw bieżącej powłoce ze stdin przekierowanym do potoku. Zamiast tego cat <(cat)pozwala mi pisać na …
Za bashpomocą mogę zastąpić proces i traktować dane wyjściowe procesu tak, jakby to był plik zapisany na dysku: $ echo <(ls) /dev/fd/63 $ ls -lAhF <(ls) lr-x------ 1 root root 64 Sep 17 12:55 /dev/fd/63 -> pipe:[1652825] niestety, zastępowanie procesów nie jest obsługiwane w dash. Jaki byłby najlepszy sposób na …
The echo one; echo two > >(cat); echo three; polecenie daje nieoczekiwany wynik. Przeczytałem to: W jaki sposób podstawianie procesów jest realizowane w bash? i wiele innych artykułów na temat zastępowania procesów w Internecie, ale nie rozumiem, dlaczego tak się zachowuje. Oczekiwany wynik: one two three Rzeczywista wydajność: prompt$ echo …
Próbuję uruchomić grep na liście kilkuset plików: $ head -n 3 <(cat files.txt) admin.php ajax/accept.php ajax/add_note.php Jednak pomimo tego, że szukam ciągu, o którym wiem, że znajduje się w plikach, następujące pliki nie wyszukują plików: $ grep -i 'foo' <(cat files.txt) $ grep -i 'foo' admin.php The foo was found …
W wersji Bash 4.2.47 (1) - wypuszczam, gdy próbuję catenate sformatowany tekst pochodzący z TUTAJ: cat <(fmt --width=10 <<FOOBAR (I want the surrounding parentheses to be part of the HERE-document) (Even the preceding unbalanced parenthesis should be part of it. FOOBAR ) # I want this paranthesis to end the …
Następująca linia jest oczywista: echo "bla" | foo | bar Ale czy te poniżej robią to samo? echo "bla" | bar <(foo) echo "bla" | bar < <(foo) Które z fooi barprzeczytałem „bla” ze standardowego wejścia i dlaczego? Mam na myśli, że oczywiście mogę po prostu kodować i sprawdzać, ale …
Mam skrypt, który analizuje nazwy plików w tablicy przy użyciu następującej metody wziętej z pytań i odpowiedzi na temat SO : unset ARGS ARGID="1" while IFS= read -r -d $'\0' FILE; do ARGS[ARGID++]="$FILE" done < <(find "$@" -type f -name '*.txt' -print0) Działa to świetnie i doskonale radzi sobie ze …
Nie mam dużego doświadczenia w używaniu tee, więc mam nadzieję, że nie jest to bardzo podstawowe. Po obejrzeniu jednej z odpowiedzi na to pytanie natknąłem się na dziwne zachowanie tee. Aby wygenerować pierwszy wiersz i znaleziony wiersz, mogę użyć tego: ps aux | tee >(head -n1) | grep syslog USER …
Badałem drugie pytanie , kiedy zdałem sobie sprawę, że nie rozumiem, co dzieje się pod maską, jakie są te /dev/fd/*pliki i jak mogą je otwierać procesy potomne.
Używamy plików cookie i innych technologii śledzenia w celu poprawy komfortu przeglądania naszej witryny, aby wyświetlać spersonalizowane treści i ukierunkowane reklamy, analizować ruch w naszej witrynie, i zrozumieć, skąd pochodzą nasi goście.
Kontynuując, wyrażasz zgodę na korzystanie z plików cookie i innych technologii śledzenia oraz potwierdzasz, że masz co najmniej 16 lat lub zgodę rodzica lub opiekuna.