Mở một cửa sổ đầu cuối và chạy lệnh, sau đó đóng cửa sổ đầu cuối nếu lệnh hoàn thành thành công?


0

Tôi đang cố gắng viết một kịch bản để làm như sau:

  1. Mở một cửa sổ đầu cuối chạy lệnh chạy dài
  2. (Lý tưởng nhất) di chuyển cửa sổ đầu cuối sang góc trên cùng bên trái của màn hình bằng xdotool
  3. Chỉ đóng cửa sổ đầu cuối nếu lệnh chạy dài đã thoát với mã trả về 0

Để đặt nó theo thuật ngữ Windows, tôi muốn có Linux tương đương start cmd /c long_running_cmdnếu long_running_cmdthành công và thực hiện tương đương start cmd /k long_running_cmdnếu thất bại.

Những gì tôi có cho đến nay là một tập lệnh bắt đầu xterm với một lệnh đã cho, và sau đó di chuyển cửa sổ theo ý muốn:

#!/bin/bash

# open a new terminal window in the background with the long running command
xterm -e ~/bin/launcher.sh ./long_running_cmd &

# move the terminal window (requires window process to be in background)
sleep 1
xdotool search --name launcher.sh windowmove 0 0

Và ~ / bin / launcher.sh được dự định để chạy bất cứ thứ gì được truyền dưới dạng đối số dòng lệnh cho nó:

#!/bin/bash

# execute command line arguments
$@

Nhưng, tôi không thể đóng cửa sổ xterm sau khi long_running_cmdhoàn thành.

Tôi nghĩ một cái gì đó giống như xterm -e ~/bin/launcher.sh "./long_running_cmd && kill $PPID" &có thể là những gì tôi đang theo đuổi, để xterm được khởi chạy trong nền và nó chạy ./long_running_cmd && kill $PPID. Vì vậy, shell trong cửa sổ xterm sau đó chạy lệnh chạy dài và nếu nó hoàn thành thành công, tiến trình cha của shell (tức là quá trình sở hữu cửa sổ xterm) sẽ bị hủy, do đó đóng cửa sổ xterm.

Nhưng, điều đó không hiệu quả: không có gì xảy ra, vì vậy tôi nghi ngờ việc trích dẫn hoặc thoát của tôi là không chính xác và tôi đã không thể sửa nó.

Một cách tiếp cận khác sẽ là lấy PID của long_running_cmd, sử dụng waitđể đợi cho nó kết thúc, sau đó tắt cửa sổ xterm bằng cách sử dụng kill $!(vì $!tham chiếu đến nhiệm vụ cuối cùng bắt đầu trong nền, sẽ là cửa sổ xterm). Nhưng tôi không thể tìm ra một cách hay để lấy giá trị PID & thoát long_running_cmdra khỏi shell chạy trong cửa sổ xterm và vào shell đã khởi chạy cửa sổ xterm (viết tắt chúng vào một tệp ở đâu đó, có vẻ như nó nên không cần thiết?).

Tôi đang làm gì sai, hay có cách nào dễ dàng hơn để thực hiện điều này?


'Lối ra' không hoạt động? làm việc với các kịch bản của tôi.
đội trưởng_G

Câu trả lời:


1

DẤU! Bạn có thể xác minh mã thoát của lệnh đã thực hiện trước đó:

if [ $? -eq 0 ]
then
  exit 0
fi
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.