การเปิดแท็บเทอร์มินัลหลายแท็บและคำสั่งที่รันอยู่


9

ฉันต้องการเปิดแท็บเทอร์มินัลหลายแท็บตั้งชื่อให้ไปที่ไดเรกทอรีและทำให้แต่ละแท็บเรียกใช้คำสั่ง

ฉันยังใหม่กับ Linux และ shell scripting หลังจากค้นหาออนไลน์และตรวจสอบโซลูชันฉันได้สร้างสคริปต์นี้ ( แก้ไขตามคำตอบด้านล่าง):

#!/bin/bash

cd /media/Extra/Project

tab=" --tab-with-profile=Default"
options=(--tab --title=Terminal)

cmds[1]="'rails s'"
titles[1]="Server"

cmds[2]="'rails c'"
titles[2]="Console"


for i in 1 2; do
  options+=($tab --title="${titles[i]}"  -e "bash -c \"${cmds[i]} ; bash\"" )          
done

gnome-terminal "${options[@]}"


exit 0

มันเปิดแท็บชื่อพวกเขา แต่ล้มเหลวในการดำเนินการคำสั่งสร้างข้อผิดพลาดนี้:

มีข้อผิดพลาดในการสร้างกระบวนการลูกสำหรับเทอร์มินัลนี้

ข้อบกพร่องอีกอย่างคือถ้าฉันหยุดคำสั่งที่กำลังรันมันจะปิดแท็บซึ่งฉันไม่ต้องการ ฉันต้องสามารถหยุดคำสั่งและเรียกใช้อีกครั้งภายในแท็บเดียวกัน

เกิดอะไรขึ้นกับสคริปต์ มีวิธีอื่นที่ง่ายกว่าในการทำเช่นนั้น?

หมายเหตุ: ถ้าฉันลบส่วน (-e "\" bash -c $ {cmds [i]}; bash \ "") ออกจากคำสั่งมันจะเปิดแท็บในไดเรกทอรีที่กำหนดและตั้งชื่อโดยไม่มีข้อผิดพลาด

-Edit-1:

หลังจากใช้คำตอบ @Tuknutx ด้านล่างและแก้ไขสคริปต์แล้วข้อผิดพลาดจะไม่ปรากฏอีกต่อไป แต่ให้ฉันbash: rails c: command not foundและrails sสร้างแอพ Rails ใหม่แทนที่จะเริ่มเซิร์ฟเวอร์ Rails ฉันกำลังใช้. rmvrc เพื่อเลือก gemset เมื่อเข้าถึงโฟลเดอร์นี้ .


หากคุณต้องการให้สคริปต์ของคุณทำงานในการบูตอูบุนตู: - คุณสามารถเรียกใช้สคริปต์เป็นบริการพุ่งพรวด ( help.ubuntu.com/community/UbuntuBootupHowto ) หรือ: ใช้ "แอปพลิเคชันเริ่มต้น" ในสภาพแวดล้อมเดสก์ท็อปของคุณ
Aboelnour

ถ้าฉันเขียนcmds[1]="'ping 192.168.9.9'"มันให้ฉันข้อผิดพลาดเดียวกัน แต่ฉันแก้ไขได้โดยลบใบเสนอราคาเดียว ดังนั้นถ้าฉันเขียนcmds[1]="ping 192.168.9.9"มันใช้งานได้
เดซี่

@ ตรงกันข้าม แต่ฉันไม่เข้าใจว่าทำไมเปิดแท็บสามแท็บหนึ่งค่าเริ่มต้นและอีกสองแท็บที่กำหนดไว้ในสคริปต์ เพราะเรากำหนดtab=" --tab-with-profile=Default"??
เดซี่

คำตอบ:


3

ฉันอยากจะแนะนำให้ใช้tmuxกับtmuxinatorมันจะทำงานให้คุณและคุณสามารถพึ่งพาterminatorเค้าโครงเช่นกัน!

สำหรับterminatorรูปแบบการชำระเงิน mhnagaoka คำตอบของที่นี่ askubuntu ด้วย:

  1. หลังจากตั้งค่ารูปแบบของคุณคลิกขวาบนพื้นหลังสถานีใด ๆ และเลือกการตั้งค่าเลย์เอาต์แท็บและคลิกที่ เพิ่มปุ่ม

  2. ให้มันชื่อและตีปิด

  3. สิ่งนี้ควรสร้าง~/.config/terminator/configไฟล์ที่กล่าวถึง

  4. ตอนนี้คุณสามารถเริ่มต้นเทอร์มิเนเตอร์โดยใช้เลย์เอาต์ที่บันทึกโดยใช้: terminator -l yourLayout(แทนที่yourLayoutด้วยสิ่งที่คุณเลือกในขั้นตอนที่ 2)

  5. (ไม่บังคับ)แก้ไข~/.config/terminator/configไฟล์เพื่อให้ไฟล์แจ้ง[layouts]และซ้อนกันด้านล่าง[[yourLayout]]เปลี่ยนชื่อของ คุณเป็นค่าเริ่มต้นและลบ / เปลี่ยนชื่อรูปแบบเริ่มต้นก่อนหน้า ตอนนี้เมื่อ Terminator เริ่มต้นโดยไม่มีพารามิเตอร์ใด ๆ มันจะโหลด[[default]]โครงร่างที่กำหนดเองของคุณ!


2

เพื่อสรุปคำตอบและความคิดเห็นอื่น ๆ สองสามข้อต่อไปนี้คือสิ่งที่ฉันได้รับ:

#!/bin/bash

cd /path/of/my/stuff

tab=" --tab"
options=()

cmds[1]="echo Banana"

cmds[2]="echo Cat"


for i in 1 2; do
options+=($tab -e "bash -c '${cmds[i]} ; bash'" )
done

gnome-terminal "${options[@]}"

exit 0

โปรดทราบว่าฉันได้ลบแท็บ 'ต้นแบบ' และโปรไฟล์และชื่อเรื่อง (ซึ่งดูเหมือนว่าจะเลิกใช้แล้วgnome-terminal)


ผลลัพธ์ของ$tab -e... Option “-e” is deprecated and might be removed in a later version of gnome-terminal.`ใช้“ -” เพื่อยกเลิกตัวเลือกและวางบรรทัดคำสั่งเพื่อเรียกใช้งานหลังจากนั้น . that's an output but the comands get executed. When i use $ tab - `คำสั่งไม่ถูกเรียกใช้และเทอร์มินัล dsisplays:There was an error creating the child process for this terminal. Failed to execute child process “bash -c 'echo Banana ; bash'” (No such file or directory)
nyxee

1

ลองสิ่งนี้:

options+=($tab --title="${titles[i]}"  -e "bash -c \"${cmds[i]} ; bash\"" ) 

มิฉะนั้นการแสดงออกทั้งหมดหลังจาก -e จะถูกตีความว่าเป็นคำสั่ง

หากต้องการรวมนามแฝงจาก. bashrc ให้ใช้-icแทนc


ข้อผิดพลาดไม่ปรากฏขึ้นอีกขอบคุณ แต่มันทำให้ฉันbash: rails c: command not foundและ 'rails' สร้างแอพพลิเคชั่นใหม่แทนการเริ่มต้นเซิร์ฟเวอร์ rails การเปลี่ยนแปลงขอบเขตของคำถามนี้ฉันจะแก้ไขด้วยการแก้ไข ur สำหรับสคริปต์
Brary

มันทำงานถ้าคุณลองrails cบน terminal โดยไม่มีอะไรอื่น? บางทีมันควรจะเป็นrails -cอย่างไร
TuKsn

พยายามที่ไม่ได้ทำงาน ฉันลองrvm list gemsetsแล้วมันบอกว่าNo command 'rvm' found.. รันคำสั่งเดียวกันrvm list gemsetsในแท็บแรกที่เปิดขึ้นโดยไม่ต้องรันคำสั่งและใช้งานได้! มันรันคำสั่งก่อนที่สภาพแวดล้อมจะโหลดและโหลดไฟล์. rvmrc หรือไม่
Brary

1

อาร์กิวเมนต์ที่คุณให้ตัวเลือก -e "bash -c command; bash"รวมถึงเครื่องหมายคำพูด มันตีความสตริงทั้งหมดนั้นเป็นชื่อของคำสั่ง! ลองใช้สิ่งนี้แทน: -e "bash -c 'command ; bash'". ด้วยวิธีนี้สิ่งที่ได้รับการทำงานในหน้าต่าง terminal ของคุณคือ commandและหลังจากนั้นคุณจะได้รับเปลือกลูกสาวซึ่งฉันถือว่าเป็นสิ่งที่คุณต้องการ อนึ่งนอกจากนี้คุณยังสามารถพูด'command & bash'; สิ่งนี้จะรันคำสั่งบนพื้นหลังและมอบเปลือกลูกสาวให้คุณทันที


ฉันเปลี่ยนมันoptions+=($tab --title="${titles[i]}" -e "\"bash -c ${cmds[i]} ;bash\"" )เป็นoptions+=($tab --title="${titles[i]}" -e "\"bash -c '${cmds[i]} ;bash'\"" )และมันทำให้ฉันมีข้อผิดพลาดเดียวกัน .. ฉันทำถูกไหม?
Brary

ไม่ถูกต้อง: ลบ \ "ก่อนทุบตีครั้งแรกและ \" หลังเครื่องหมาย 'หลังจากทุบตีครั้งที่สอง
Silvio Levy

ขอบคุณฉันแก้ไขคำถามและเปลี่ยนขอบเขตของมันเพื่อรวม rails และ rvm
Brary
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.