Respostas:
Tente esse cara =):
sed -n 'line_num p' | bash
ou
"$(sed -n 'line_num p')"
line_nume p, por exemplo, se line_numfor 123, você poderá sed -n 123p | bash. E se shfor suficiente, basta usar em shvez de bash.
sed -n 'line_num p' | shpoderia ser outra solução? Este tem mais compatibilidade?
shrealmente é. Nos sistemas Debian (e derivados)sh é geralmente dash. Se o script foi escrito para dash (ou se baseia em sintaxe portátil) , provavelmente, sim, mas se foi escrito para bashisso, quase definitivamente não.
historye perceber que desejo executar a linha 900, posso executar a linha 900 de alguma forma?
Se você estiver fazendo isso de maneira interativa, poderá escrever a linha no histórico do bash:
history -s "$(sed -n 'line_num p')"
Em seguida, pressione ↑Enterpara inserir a linha no buffer da linha de leitura e execute-a; isso permite que você olhe para a linha antes que seja tarde demais.
man history
historyé um built-in, portanto está documentado em help history(ou man bash, mas isso é muita leitura). Citando o acima, history -s"anexará os ARGs à lista de histórico como uma única entrada"
Você pode fazer...
{ head -n"$((NUM-1))"; IFS= read -r line; } </path/to/script >/dev/null
eval "$line"
Isso obterá apenas a $NUMlinha do seu script na variável do shell $linee a avaliará como um comando no shell atual.
Outra maneira de fazer isso pode parecer:
</path/to/script sed "${NUM}q;d" >/tmp/"$$"
. /tmp/"$$" ; rm /tmp/"$$"
eval.
gnu sedtem a ebandeira de modo algo como sed "${NUM}"'!d;s/^//e;q'também trabalho