Czasami muszę wykonać jedno polecenie w skrypcie powłoki.
Wiem już, że sed -n 'line_num p'
mogę wydrukować tę linię. Ale jak mogę wykonać ten wydrukowany wiersz jako polecenie?
bash
command-line
Zen
źródło
źródło
line_num
ip
, więc na przykład jeśliline_num
jest to 123, możeszsed -n 123p | bash
. A jeślish
to wystarczy, po prostu użyjsh
zamiastbash
.sed -n 'line_num p' | sh
może być inne rozwiązanie? Czy ten ma większą kompatybilność?sh
faktycznie jest powłoka . W systemach Debian (i pochodnych)sh
jest zwykledash
. Jeśli skrypt jest napisany dladash
(lub w inny sposób opiera się na przenośnej składni), prawdopodobnie tak, ale jeśli jest napisany dla,bash
to prawie na pewno nie.history
i zobaczę, że chcę uruchomić linię 900, czy mogę jakoś uruchomić linię 900?Jeśli robisz to interaktywnie, możesz zapisać wiersz w historii bash:
Następnie naciśnij, ↑Enteraby wstawić linię do bufora readline i wykonać ją; daje to szansę rzucić okiem na linię, zanim będzie za późno.
źródło
man history
history
jest wbudowany, więc jest udokumentowany whelp history
(lubman bash
, ale to dużo czytania). Cytując powyższe,history -s
„doda ARG do listy historii jako pojedynczy wpis”Możesz to zrobić...
Otrzyma tylko
$NUM
wiersz ze skryptu w zmiennej powłoki,$line
a następnie oceni go jako polecenie w bieżącej powłoki.Innym sposobem na to może wyglądać:
źródło
eval
.gnu sed
mae
flagę, więc coś w stylused "${NUM}"'!d;s/^//e;q'
też by działałoCzy edytujesz swój skrypt za pomocą vima (vi w systemie Linux)? W vi dodaj mapowanie:
a następnie, gdy znajdziesz się na ciekawej linii w vi, naciśnij F4
źródło
W bash możesz uruchomić następujące polecenie:
źródło