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'
也可以工作