Jawaban:
Coba orang ini =):
sed -n 'line_num p' | bash
atau
"$(sed -n 'line_num p')"
line_numdan p, jadi misalnya jika line_num123, maka Anda bisa sed -n 123p | bash. Dan jika shsudah cukup, maka gunakan shsaja bash.
sed -n 'line_num p' | shbisa jadi solusi lain? Apakah yang ini memiliki lebih banyak kompatibilitas?
shsebenarnya shell itu. Pada Debian (dan berasal) sistem shbiasanya dash. Jika skrip ditulis untuk dash (atau bergantung pada sintaks portabel) maka mungkin, ya, tetapi jika itu ditulis untuk bashmaka hampir pasti tidak.
historydan saya melihat bahwa saya ingin menjalankan baris 900, dapatkah saya menjalankan baris 900 entah bagaimana?
Jika Anda melakukan ini secara interaktif, Anda bisa menulis baris ke dalam bash history:
history -s "$(sed -n 'line_num p')"
Kemudian tekan ↑Enteruntuk memasukkan baris ke buffer readline, dan jalankan; yang memberi Anda kesempatan untuk melirik garis sebelum terlambat.
man history
historyadalah built-in, sehingga didokumentasikan dalam help history(atau man bash, tapi itu banyak bacaan). Mengutip hal di atas, history -sakan "menambahkan ARG ke daftar riwayat sebagai satu entri"
Anda dapat melakukan...
{ head -n"$((NUM-1))"; IFS= read -r line; } </path/to/script >/dev/null
eval "$line"
Itu hanya akan mendapatkan $NUMbaris dari skrip Anda di variabel shell $linedan kemudian mengevaluasinya sebagai perintah di shell saat ini.
Cara lain untuk melakukan ini bisa terlihat seperti:
</path/to/script sed "${NUM}q;d" >/tmp/"$$"
. /tmp/"$$" ; rm /tmp/"$$"
eval.
gnu sedmemiliki ebendera sehingga sesuatu seperti sed "${NUM}"'!d;s/^//e;q'juga berfungsi