Risposte:
Prova questo ragazzo =):
sed -n 'line_num p' | bash
o
"$(sed -n 'line_num p')"
line_nume p, quindi ad esempio se line_numè 123, è possibile sed -n 123p | bash. E se shè abbastanza, basta usare shinvece di bash.
sed -n 'line_num p' | shpotrebbe essere un'altra soluzione? Questo ha più compatibilità?
shsia effettivamente la shell . Su Debian (e derivati) sistemi shdi solito dash. Se lo script è scritto per dash (o altrimenti si basa su una sintassi portatile) , probabilmente, sì, ma se è scritto per bashquasi sicuramente no.
historye vedo che voglio eseguire la linea 900, posso eseguire la linea 900 in qualche modo?
Se lo stai facendo in modo interattivo, potresti scrivere la riga nella cronologia di bash:
history -s "$(sed -n 'line_num p')"
Quindi premere ↑Enterper inserire la linea nel buffer readline ed eseguirla; che ti dà la possibilità di dare un'occhiata alla linea prima che sia troppo tardi.
man history
historyè un built-in, quindi è documentato in help history(o man bash, ma è un sacco di lettura). Citando quanto sopra, history -s"aggiungerà gli ARG all'elenco cronologico come una singola voce"
Tu puoi fare...
{ head -n"$((NUM-1))"; IFS= read -r line; } </path/to/script >/dev/null
eval "$line"
Ciò otterrà solo la $NUMriga dallo script nella variabile shell $linee quindi la valuterà come comando nella shell corrente.
Un altro modo per farlo potrebbe apparire come:
</path/to/script sed "${NUM}q;d" >/tmp/"$$"
. /tmp/"$$" ; rm /tmp/"$$"
eval.
gnu sedha la ebandiera, quindi qualcosa del genere sed "${NUM}"'!d;s/^//e;q'funzionerebbe anche