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
identyczny123456
źródło

Odpowiedzi:

6

Po prostu potokuj je do swojej powłoki:

$ printf 'echo foo\necho bar\n' | bash
foo
bar
nxnev
źródło
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?

Kusalananda
źródło
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
DopeGhoti
źródło
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