Odpowiedzi:
Spróbuj tego faceta =):
sed -n 'line_num p' | bash
lub
"$(sed -n 'line_num p')"
line_numi p, więc na przykład jeśli line_numjest to 123, możesz sed -n 123p | bash. A jeśli shto wystarczy, po prostu użyj shzamiast bash.
sed -n 'line_num p' | shmoże być inne rozwiązanie? Czy ten ma większą kompatybilność?
shfaktycznie jest powłoka . W systemach Debian (i pochodnych)sh jest zwykle dash. Jeśli skrypt jest napisany dla dash (lub w inny sposób opiera się na przenośnej składni), prawdopodobnie tak, ale jeśli jest napisany dla, bashto prawie na pewno nie.
historyi zobaczę, że chcę uruchomić linię 900, czy mogę jakoś uruchomić linię 900?
Jeśli robisz to interaktywnie, możesz zapisać wiersz w historii bash:
history -s "$(sed -n 'line_num p')"
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.
man history
historyjest wbudowany, więc jest udokumentowany w help history(lub man bash, ale to dużo czytania). Cytując powyższe, history -s„doda ARG do listy historii jako pojedynczy wpis”
Możesz to zrobić...
{ head -n"$((NUM-1))"; IFS= read -r line; } </path/to/script >/dev/null
eval "$line"
Otrzyma tylko $NUMwiersz ze skryptu w zmiennej powłoki, $linea następnie oceni go jako polecenie w bieżącej powłoki.
Innym sposobem na to może wyglądać:
</path/to/script sed "${NUM}q;d" >/tmp/"$$"
. /tmp/"$$" ; rm /tmp/"$$"
eval.
gnu sedma eflagę, więc coś w stylu sed "${NUM}"'!d;s/^//e;q'też by działało