Câu trả lời của ændrük là tốt, nhưng có lẽ hơi nặng nề cho nhiệm vụ.
Đây là một kịch bản viết một kịch bản dựa trên các đối số của nó
#!/bin/sh
# terminal-plus-command: start a subordinate terminal which runs
# the interactive shell after first running the command arguments
tmpscript=/tmp/tmpscript.$$
echo "#!$SHELL" > $tmpscript
echo "$@" >> $tmpscript
echo exec "$SHELL" >> $tmpscript
chmod +x $tmpscript
gnome-terminal --command $tmpscript
rm -f $tmpscript
Nếu bạn chưa thực hiện nhiều chương trình shell, dường như có nhiều phép thuật ở đây hơn là có. Đầu tiên, tôi đặt tên cho một tệp tạm thời để giữ tập lệnh trong đó $$
ID tiến trình của trình bao chạy tập lệnh này. Các /tmp/something.$$
ẩn dụ được sử dụng trong trường hợp hai trường hợp kịch bản này đang chạy cùng một lúc, họ sẽ không cố gắng sử dụng các tập tin tạm thời như vậy.
Biến $SHELL
được đặt thành tên của shell đang chạy tập lệnh. Nếu bạn sử dụng / usr / bin / bash, có lẽ bạn cũng muốn tập lệnh mini để sử dụng nó.
Đây "$@"
là một thành ngữ shell cho "nội suy tất cả các đối số của tôi, trích dẫn chúng nếu cần". Cú pháp đặc biệt này gây ra
script.sh 'my file' your\ file
để nội suy các đối số là hai phần tử
"my file" "your file"
thay vì bốn $@
sẽ mang lại
"my" "file" "your" "file"
Các dòng cuối cùng của tập lệnh sắp xếp cho một thiết bị đầu cuối gnome để bắt đầu chạy tập lệnh nhỏ và sau đó bắt đầu một vỏ tương tác. Khi gnome-terminal thoát, tập lệnh tạm thời bị xóa vì xả rác là không hợp lệ.
Dòng cuối cùng không phải là một phần của tập lệnh mini, nó chứng tỏ rằng tập lệnh nhỏ hoạt động. Nếu tập lệnh 11 dòng ở trên nằm trong một tệp được gọi rt.sh
thì tập lệnh chmod
sẽ thực thi và sau đó nó được thực thi.
$ chmod +x rt.sh && ./rt.sh echo hello world
Kết quả của tất cả những điều này sẽ là một thiết bị đầu cuối gnome khởi động, hiển thị
hello world
trên dòng đầu tiên và sau đó bắt đầu một vỏ tương tác:
msw@myhost:~$