Wykonywanie poleceń wydrukowanych na standardowym wyjściu


2

Jak wykonać polecenia, które wypisuję na standardowym wyjściu, używając na przykład awk, używam awk do wydrukowania tego:

grep -B100 some file1.tcl
grep -B100 some file2.tcl

Następnie przechowuj go w pliku .sh, a następnie źródłowy plik. Czy możliwe jest przesłanie go gdzieś w celu wykonania poleceń?

awk '{print xx}' | pipeline

Odpowiedzi:


6

Po prostu potokuj je do swojej powłoki:

$ printf 'echo foo\necho bar\n' | bash
foo
bar

Zdecydowanie sugerowałbym zamiast tego zamianę procesu, aby niektóre polecenia nie pożerały kolejnych poleceń w ramach standardowego wejścia.
mur

6

W przypadku czegoś bardziej zaawansowanego niż proste polecenie (i oczywiście także proste polecenia):

eval "$( awk ... )"

Spowodowałoby to uruchomienie kodu w środowisku bieżącej powłoki i dlatego kod mógłby również ustawić och modyfikować zmienne w twojej powłoce.

Ponieważ jednak oczywiście chcesz parsować inne pliki grep, dlaczego nie zrobić tego w tym samym awkprogramie? ... lub z innym awkprogramem, który odczytuje wzorce i nazwy plików?


2

Nie musisz nawet tego robić, ponieważ już żyjesz niebezpiecznie; po prostu uruchom polecenie, które zawsze wypisuje tylko bezpieczne polecenia do wykonania w konstrukcji rozszerzenia podpowłoki:

$ $( awk 'BEGIN { print "echo hello" }' )
hello

Nie współdziała to dobrze z cudzysłowami i dzieleniem słów. Gdyby awk znalazł się print "touch \"Hello world.txt\""w powłoce, nie honorowałby cytowania - zamiast tego tworzyłby pliki "Helloi world.txt".
grawitacja
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.