Câu trả lời:
Hãy thử anh chàng này =):
sed -n 'line_num p' | bash
hoặc là
"$(sed -n 'line_num p')"
line_numvà p, ví dụ nếu line_numlà 123, thì bạn có thể sed -n 123p | bash. Và nếu shlà đủ, sau đó chỉ cần sử dụng shthay vì bash.
sed -n 'line_num p' | shcó thể là một giải pháp khác? Là cái này có nhiều khả năng tương thích?
shthực sự là gì. Trên hệ thống Debian (và dẫn xuất)sh thường là dash. Nếu tập lệnh được viết cho dash (hoặc nói cách khác là dựa vào cú pháp di động) thì có lẽ, vâng, nhưng nếu nó được viết cho bashthì gần như chắc chắn là không.
historyvà tôi thấy rằng tôi muốn chạy dòng 900, tôi có thể chạy dòng 900 bằng cách nào không?
Nếu bạn đang làm điều này một cách tương tác, bạn có thể viết dòng vào lịch sử bash:
history -s "$(sed -n 'line_num p')"
Sau đó nhấn ↑Enterđể chèn dòng vào bộ đệm readline và thực hiện nó; điều đó cho bạn cơ hội liếc nhìn dòng trước khi quá muộn.
man history
historylà một tích hợp, vì vậy nó được ghi lại trong help history(hoặc man bash, nhưng đó là rất nhiều đọc). Trích dẫn ở trên, history -ssẽ "nối thêm các ĐỐI_SỐ vào danh sách lịch sử như một mục duy nhất"
Bạn có thể làm...
{ head -n"$((NUM-1))"; IFS= read -r line; } </path/to/script >/dev/null
eval "$line"
Điều đó sẽ chỉ nhận được $NUMdòng từ tập lệnh của bạn trong biến shell $linevà sau đó đánh giá nó như một lệnh trong shell hiện tại.
Một cách khác để làm điều này có thể trông giống như:
</path/to/script sed "${NUM}q;d" >/tmp/"$$"
. /tmp/"$$" ; rm /tmp/"$$"
eval.
gnu sedcó ecờ nên thứ gì đó cũng sed "${NUM}"'!d;s/^//e;q'sẽ hoạt động