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_num
và p
, ví dụ nếu line_num
là 123, thì bạn có thể sed -n 123p | bash
. Và nếu sh
là đủ, sau đó chỉ cần sử dụng sh
thay vì bash
.
sed -n 'line_num p' | sh
có 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?
sh
thự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 bash
thì gần như chắc chắn là không.
history
và 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
history
là 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 -s
sẽ "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 $NUM
dòng từ tập lệnh của bạn trong biến shell $line
và 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 sed
có e
cờ nên thứ gì đó cũng sed "${NUM}"'!d;s/^//e;q'
sẽ hoạt động