Yanıtlar:
Bu adamı dene =):
sed -n 'line_num p' | bash
veya
"$(sed -n 'line_num p')"
line_numve pböylece örneğin eğer line_num123 ise, o zaman yapabilirsiniz sed -n 123p | bash. Ve eğer shyeterliyse, sadece shyerine kullanın bash.
sed -n 'line_num p' | shbaşka bir çözüm olabilir mi? Bunun daha fazla uyumluluğu var mı?
shgerçekte ne olduğuna da bağlıdır . Debian (ve türetilmiş) sistemlerde shgenellikle vardır dash. Komut dosyası için yazılırsa dash (veya taşınabilir sözdizimine bağlıysa), muhtemelen, evet, ancak yazılırsa bashneredeyse kesinlikle değil.
historyve 900 hattını çalıştırmak istediğimi görürsem, 900 hattını bir şekilde çalıştırabilir miyim?
Bunu etkileşimli olarak yapıyorsanız, satırı bash tarihine yazabilirsiniz:
history -s "$(sed -n 'line_num p')"
Sonra ↑Entersatırı okuma satırı arabelleğine eklemek ve yürütmek için tuşuna basın ; bu size geç olmadan çizgiye bakma şansı verir.
man history
historyyerleşiktir, bu nedenle belgelenmiştir help history(veya man bashbu çok fazla okuma). Yukarıdakilerden alıntı yapıldığında, history -s"ARG'leri geçmiş listesine tek bir giriş olarak ekleyecek"
Yapabilirsin...
{ head -n"$((NUM-1))"; IFS= read -r line; } </path/to/script >/dev/null
eval "$line"
Bu $NUM, kabuk değişkenindeki komut dosyanızdan yalnızca satırı alır $lineve geçerli kabukta bir komut olarak değerlendirir.
Bunu yapmanın başka bir yolu şöyle görünebilir:
</path/to/script sed "${NUM}q;d" >/tmp/"$$"
. /tmp/"$$" ; rm /tmp/"$$"
eval.
gnu sedvardır ebir şey gibi pek bayrağı sed "${NUM}"'!d;s/^//e;q'da iş olur