Điểm:0

Làm cách nào để chạy lệnh trong thiết bị đầu cuối đã mở trước đó bằng lệnh gnome-terminal trong tập lệnh shell?

lá cờ cn

Tôi muốn chạy một mã nguồn cần bốn thiết bị đầu cuối A, B, C và D. Có một số lệnh cho mã nguồn chạy trong Ubuntu. Các lệnh này phải được chạy theo thứ tự trong thiết bị đầu cuối A, B, C, D, A, B và C. Thật vậy, các lệnh này được kết nối với nhau và phải được thực hiện theo thứ tự cụ thể này.

Tôi muốn tự động chạy mã nguồn bằng shell scripting. Tôi đã viết một tập lệnh shell mở nhiều thiết bị đầu cuối bằng thiết bị đầu cuối gnome và nó hoạt động tốt cho đến nay:

gnome-terminal --title="A" -- bash -c "cd ~; ./myscript1; exec bash"
gnome-terminal --title="B" -- bash -c "cd ~; ./myscript2; exec bash"
gnome-terminal --title="C" -- bash -c "cd ~; ./myscript3; exec bash"
gnome-terminal --title="D" -- bash -c "cd ~; ./myscript4; exec bash"

Bây giờ tôi muốn quay lại thiết bị đầu cuối Một và chạy một lệnh khác bên trong nó.

Câu lệnh sau không hoạt động tốt, nó mở ra một thiết bị đầu cuối mới!

gnome-terminal --title="A" -- bash -c "cd ~; command; exec bash"

Tôi không hiểu cách thực hiện việc này sau khi đọc các trang hướng dẫn của Gnome-terminal và tìm kiếm trên web.

Doug Smythies avatar
lá cờ gn
Bạn có thể chuyển mã thông báo từ myscript3 sang myscript1, chẳng hạn như thông qua một đường dẫn có tên. Sau khi làm mọi thứ khác, myscript1 sẽ đợi mã thông báo và myscript3 sẽ chỉ gửi mã vào thời điểm thích hợp.
sudodus avatar
lá cờ jp
Cũng có thể giao tiếp thông qua sự tồn tại của một tập tin.
N. S. avatar
lá cờ cn
@sudodus. Ý bạn là tập tin gì?!
sudodus avatar
lá cờ jp
Bạn có thể để quy trình trong một cửa sổ đầu cuối tạo tệp và kiểm tra tệp đó nhiều lần, đồng thời để quy trình trong cửa sổ khác xóa tệp đó khi nó sẵn sàng. Hoặc ngược lại: để quy trình trong một cửa sổ đầu cuối đợi cho đến khi tệp tồn tại và để quy trình trong cửa sổ khác tạo tệp đó khi tệp sẵn sàng.Tên tệp có thể là một tệp tạm thời (hoặc một tập hợp các tệp tạm thời) và (các) tên có thể được kiểm soát bởi shellscript chính, khởi tạo các quy trình trong bốn cửa sổ đầu cuối. - Một tệp như vậy có thể trống hoặc chứa một thông báo.
N. S. avatar
lá cờ cn
Tôi đã tạo 2 tập lệnh bash "A" và "B" và tập lệnh "chạy" chạy song song "A" và "B". nội dung "chạy" là: bash ./A & bash ./B & chờ đợi. Tôi đợi trong "A" để tạo tệp bằng câu lệnh "trong khi" và trong "B" tôi tạo tệp đó, nhưng không có lệnh nào từ "A" được thực thi.
raj avatar
lá cờ cn
raj
Phải có 4 cửa sổ `gnome-terminal` riêng biệt? Hoặc có thể có một cửa sổ duy nhất với 4 phiên cuối riêng biệt, có thể chuyển đổi không? Bởi vì trong trường hợp sau, bạn có thể sử dụng tập lệnh `expect` kết hợp với `screen` (nơi bạn bắt đầu 4 phiên trong `screen`) để có hành vi mong muốn.
Điểm:2
lá cờ cn

Bạn không thể, ngoại trừ có lẽ theo cách hackish bằng cách sử dụng mô phỏng nhấn phím. ví dụ. xdotool để quay lại cửa sổ đầu tiên, sau đó dán một số lệnh.

Có thể có những cách tốt hơn để làm những gì bạn muốn. Tuy nhiên, để chúng tôi đưa ra gợi ý tốt hơn, chúng tôi cần biết bạn thực sự muốn đạt được điều gì.

N. S. avatar
lá cờ cn
Tôi đã chỉnh sửa câu hỏi của mình và thêm các giải thích bổ sung. Cảm ơn đã dành một cái nhìn...
Điểm:1
lá cờ jp

Hãy thử với bản demo sau đang chạy Mộtb

Một sư phụ tập lệnh tạo một tệp tạm thời (trong /tmp) và bắt đầu một kịch bảntập lệnh b Trong xterm các cửa sổ.

Cài đặt

sudo apt cài đặt xterm

Đặt tất cả các tập lệnh vào một thư mục chuyên dụng, làm cho chúng có thể thực thi được và chạy

./sư phụ

sư phụ:

#!/bin/bash

tiếng vang "$0 bắt đầu"

b4a=$(mktemp)

Nohup xterm -fa default -e ./a-script "$b4a" 2> /dev/null &
Nohup xterm -fa default -e ./b-script "$b4a" 2> /dev/null &

nếu kiểm tra -f "$b4a"
sau đó
 rm "$b4a"
fi
lặp lại "$0 kết thúc"

một kịch bản:

#!/bin/bash

tiếng vang "$0 bắt đầu"
echo "$0 có thể làm mọi việc ở đây..."
trong khi ! kiểm tra -f "$1"
làm
 ngủ 1
 tiếng vang -n "."
xong
tiếng vang ""
echo "$0 có thể làm mọi việc ở đây..."
rm "$1"
đọc -p "$0: Nhấn enter để kết thúc"

tập lệnh b:

#!/bin/bash

tiếng vang "$0 bắt đầu"
echo "$0 có thể làm mọi việc ở đây..."
ngủ 5
chạm vào "$1"
đọc -p "$0: Nhấn enter để kết thúc"
N. S. avatar
lá cờ cn
Cảm ơn câu trả lời của bạn. Tôi đã viết những tập lệnh này, nhưng tôi nghĩ vấn đề có liên quan đến bộ chứa docker của tôi! Thật vậy, tôi chạy hai vùng chứa trong a-script và b-script và sau đó tôi muốn chạy một số lệnh trong các vùng chứa này. Khi tôi viết một số lệnh trong a-script sau vòng lặp while, các lệnh đó sẽ không thực thi trong vùng chứa tương ứng.
sudodus avatar
lá cờ jp
Tại sao bạn lại chạy hai vùng chứa trong a-script và b-script? Và tại sao bạn lại sử dụng bốn cửa sổ đầu cuối? -- Có thể thiết lập cấu trúc của nhiệm vụ theo cách đơn giản hơn, điều đó sẽ thực hiện công việc với ít vấn đề hơn. Nếu bạn cho chúng tôi biết (hoặc chỉ tôi, nếu bạn không muốn công khai nhiệm vụ), bạn có thể nhận trợ giúp về cấu trúc.
N. S. avatar
lá cờ cn
Làm thế nào tôi có thể nói chỉ với bạn? Cảm ơn bạn đã giúp đỡ
sudodus avatar
lá cờ jp
@NS Bạn có thể lấy ID người dùng tại [Diễn đàn Ubuntu](https://ubuntuforums.org) và liên lạc qua các tin nhắn trên Diễn đàn Ubuntu (ID người dùng của tôi cũng là 'sudodus' ở đó).
N. S. avatar
lá cờ cn
Tôi rất xin lỗi. Tôi không biết cách giao tiếp với bạn qua Diễn đàn Ubuntu! :(

Đăng câu trả lời

Hầu hết mọi người không hiểu rằng việc đặt nhiều câu hỏi sẽ mở ra cơ hội học hỏi và cải thiện mối quan hệ giữa các cá nhân. Ví dụ, trong các nghiên cứu của Alison, mặc dù mọi người có thể nhớ chính xác có bao nhiêu câu hỏi đã được đặt ra trong các cuộc trò chuyện của họ, nhưng họ không trực giác nhận ra mối liên hệ giữa câu hỏi và sự yêu thích. Qua bốn nghiên cứu, trong đó những người tham gia tự tham gia vào các cuộc trò chuyện hoặc đọc bản ghi lại các cuộc trò chuyện của người khác, mọi người có xu hướng không nhận ra rằng việc đặt câu hỏi sẽ ảnh hưởng—hoặc đã ảnh hưởng—mức độ thân thiện giữa những người đối thoại.