回答:
この男を試してください=):
sed -n 'line_num p' | bash
または
"$(sed -n 'line_num p')"
line_numとの間にスペースを入れる必要はありません。pたとえば、line_num123の場合は、でき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'作業もだろう