Answers:
试试这个家伙=):
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脚本中的shell变量中获取该行$line,然后在当前shell中将其作为命令进行评估。
执行此操作的另一种方法可能类似于:
</path/to/script sed "${NUM}q;d" >/tmp/"$$"
. /tmp/"$$" ; rm /tmp/"$$"
eval。
gnu sed带有e标志,这样类似的东西sed "${NUM}"'!d;s/^//e;q'也可以工作