Mở nhiều tab bằng gnome-terminal


16

Tôi đang cố gắng tạo một lệnh sẽ mở 3 dịch vụ từ ngăn xếp Rails, rails s, spork và autotest. Tôi có thể chạy các lệnh này riêng lẻ bằng cách mở 3 thiết bị đầu cuối, vào thư mục ứng dụng và chạy chúng. Tôi thậm chí có thể mở 3 tab mới và chạy các lệnh trên mỗi tab.

Vấn đề là họ thất bại khi tôi cố gắng mở các tab thông qua gnome-terminal như vậy:

gnome-terminal --tab --title="rails s" -e "rails s" --tab --title="spork" -e "spork" --tab --title="autotest" -e "autotest"

Lỗi (đối với spork và autotest):

There was an error creating the child process for this terminal
Failed to execute child process "spork" (No such file or directory)

Đáng ngạc nhiên là nó hoạt động cho 'rails s' (tab hiển thị máy chủ đang chạy).

Có ý kiến ​​gì không?

Câu trả lời:


9

Dưới đây là câu trả lời từ stackoverflow.com

  1. Thêm một eval "$BASH_POST_RC"vào cuối .bashrc của bạn

  2. Đặt BASH_POST_RCbiến môi trường cho mỗi tab theo lệnh mà bạn muốn thực hiện, ví dụ: gnome-terminal --working-directory="/home/zardoz/projects/my_rails_app" --tab -e 'bash -c "export BASH_POST_RC=\"rails server\"; exec bash"' --tab -e 'bash -c "export BASH_POST_RC=\"autotest\"; exec bash"'


15

Gọi gnome-terminalba lần và xâu chuỗi các lệnh cùng với && sẽ không hoạt động và các tab sẽ không xuất hiện trong cùng một thiết bị đầu cuối và thực sự bạn sẽ phải thoát khỏi thiết bị đầu tiên để xuất hiện tiếp theo.

Cách để đảm bảo tất cả các tab của bạn mở trong một phiên bản của gnome-terminaltất cả cùng một lúc là sử dụng công --tab-with-profile=PROFILENAMEtắc. Trong lệnh bên dưới, bạn có thể để lại lệnh đầu tiên gnome-terminal --tabvì đó là cửa sổ đầu tiên được tạo; bây giờ tất cả những gì bạn cần biết là hồ sơ nào bạn đang sử dụng và bạn có thể sử dụng --tab-with-profile=YourProfileđể gọi các lệnh khác và tất cả chúng sẽ xuất hiện cùng một lúc trong thiết bị đầu cuối ban đầu được mở.

Đây là lệnh của bạn được sửa đổi:

gnome-terminal --tab --title="rails s" -e "rails s" --tab-with-profile=Default --title="spork" -e "spork" --tab-with-profile=Default --title="autotest" -e "autotest"

(Đối với người đọc trong tương lai: thay thế tên chương trình được cung cấp sau -eđể kiểm tra dòng lệnh được cung cấp ở đây; hãy nhớ các mục tiêu của bạn -ephải được cài đặt và trong $PATH; đối với những thứ không được $PATHsử dụng một đường dẫn tuyệt đối, chẳng hạn, chẳng hạn, /opt/mike/program)

Hãy nhớ chỉ định hồ sơ thực tế bạn đang sử dụng cho các --tab-with-profilethiết bị chuyển mạch. Yêu cầu đầu tiên gnome-terminalphải sử dụng --tabvà tất cả phần còn lại --tab-with-profile. Với phương pháp này, có thể mở một số lượng lớn các tab trong cùng một ví dụ gnome-terminal.

Tìm hồ sơ bạn hiện đang sử dụng bằng cách nhấp chuột phải gnome-terminalvà xem hồ sơ và sẽ có một điểm đánh dấu trên hồ sơ bạn hiện đang sử dụng:

nhập mô tả hình ảnh ở đây

Đi đến tùy chọn Hồ sơ để biết thêm thông tin và kiểm tra tên của hồ sơ.

Để biết thêm thông tin, hãy xem man gnome-terminalvà các trang web Ubuntu trực tuyến .


Lưu ý :

Nếu bạn gặp khó khăn khi khởi chạy chương trình của mình gnome-terminal, hãy thêm vị trí vào $PATHhoặc tạo liên kết tượng trưng và đặt nó vào $PATHvị trí hoặc (điều rất hữu ích ở đây): tạo tập lệnh bash đơn giản và gọi nó trong gnome-terminaldòng lệnh ở trên. (Bạn phải gọi nó bằng một đường dẫn tuyệt đối: tức là /location/of/scriptvà không chỉ tên của nó.)

Ví dụ:

#!/bin/bash
cd $HOME/.rvm/gems/ruby-2.0.0-p0/bin 
spork
exit 0

Sau đó, đặt tên cho kịch bản, làm cho nó có thể thực thi được và gọi nó trong gnome-terminaldòng lệnh ở trên. Làm điều này cho tất cả các chương trình không repo có vấn đề.


Làm thế nào để tôi biết hồ sơ? (Tôi đã thử với Mặc định, tên người dùng của tôi và ~ / .profile)
Manuel

Nó nói Mặc định nhưng tôi gặp lỗi tương tự khi sử dụng --tab-with-profile = Mặc định
Manuel

@Manuel Khả năng khác là các lệnh đích không có trong bạn $PATH; chỉ định vị trí của sporkcác lệnh khác với một đường dẫn tuyệt đối.

Lệnh tôi đang sử dụng là gnome-terminal --tab --title = "rails s" -e "rails s" --tab-with-profile = Mặc định --title = "spork" -e "spork" - tab-with-profile = Mặc định --title = "autotest" -e "autotest" (sao chép / dán từ câu trả lời của bạn). Về $ PATH, nếu đây là vấn đề thì tại sao nó hoạt động trên một tab được mở thông qua menu?
Manuel

@Manuel Như bạn nói trong câu hỏi của mình, bạn phải vào "thư mục ứng dụng" và chạy chúng từ đó, điều đó có nghĩa là chúng không có trong đó $PATH. Phương thức trong câu trả lời là phương thức tôi sử dụng để khởi chạy tất cả các chương trình dòng lệnh được cài đặt trong kho lưu trữ trong các tab khác nhau trong cùng một gnome-terminalcửa sổ và nó luôn hoạt động, vì các chương trình khác nằm trong $ PATH.

0

gnome-terminal --tab -- sh -c "python3 'test.py' ; bash"

mã này mở tab mới trong thiết bị đầu cuối chạy tập lệnh python và khi hết, tab mới này sẽ không đóng, vì tôi đã thêm 'bash' vào cuối mã này ...

nếu bạn muốn nó nhiều lần, hãy đặt nó vào một vòng lặp while trong tập lệnh bash của bạn

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.