Ответы:
Попробуй этого парня =)
sed -n 'line_num p' | bash
или
"$(sed -n 'line_num p')"
line_numи p, например, если line_numэто 123, то вы можете sed -n 123p | bash. И если этого shдостаточно, то просто используйте shвместо bash.
sed -n 'line_num p' | shможет быть другое решение? У этого больше совместимости?
shсамом деле. На Debian (и производных) системах shэто обычно dash. Если сценарий написан для dash (или иным образом основан на переносимом синтаксисе), то, вероятно, да, но если он написан для, bashто почти наверняка нет.
historyи вижу, что хочу запустить строку 900, могу ли я как-нибудь запустить строку 900?
Если вы делаете это в интерактивном режиме, вы можете написать строку в истории Bash:
history -s "$(sed -n 'line_num p')"
Затем нажмите, ↑Enterчтобы вставить строку в буфер readline и выполнить ее; это дает вам возможность взглянуть на линию, пока не стало слишком поздно.
man history
historyвстроенный, так что задокументирован help history(или man bash, но это много читается). Цитируя вышеизложенное, history -s«добавлю ARG в список истории как одну запись»
Ты можешь сделать...
{ head -n"$((NUM-1))"; IFS= read -r line; } </path/to/script >/dev/null
eval "$line"
Это позволит получить только $NUMстроку из вашего скрипта в переменной оболочки $lineи затем оценить ее как команду в текущей оболочке.
Другой способ сделать это может выглядеть так:
</path/to/script sed "${NUM}q;d" >/tmp/"$$"
. /tmp/"$$" ; rm /tmp/"$$"
eval.
gnu sedимеет eфлаг, чтобы что-то вроде sed "${NUM}"'!d;s/^//e;q'бы тоже работало