Score:0

จะรันคำสั่งภายในเทอร์มินัลที่เปิดไว้ก่อนหน้านี้ด้วยคำสั่ง gnome-terminal ในเชลล์สคริปต์ได้อย่างไร

ธง cn

ฉันต้องการเรียกใช้ซอร์สโค้ดที่ต้องการสี่เทอร์มินัล A, B, C และ D มีคำสั่งบางอย่างสำหรับซอร์สโค้ดที่ทำงานใน Ubuntu ต้องรันคำสั่งเหล่านี้ตามลำดับในเทอร์มินัล A, B, C, D, A, B และ C. แน่นอนว่าคำสั่งเหล่านี้เชื่อมต่อกันและต้องดำเนินการตามลำดับเฉพาะนี้

ฉันต้องการเรียกใช้ซอร์สโค้ดโดยอัตโนมัติด้วยเชลล์สคริปต์ ฉันได้เขียนเชลล์สคริปต์ที่เปิดหลายเทอร์มินัลด้วย คำพังเพย-terminal และใช้งานได้ดีจนถึงตอนนี้:

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"

ตอนนี้ฉันต้องการกลับไปที่สถานี และเรียกใช้คำสั่งอื่นภายในนั้น

คำสั่งต่อไปนี้ใช้งานไม่ได้ มันเปิดเทอร์มินัลใหม่!

gnome-terminal --title="A" -- bash -c "cd ~; command; exec ทุบตี"

ฉันไม่เข้าใจวิธีการทำสิ่งนี้หลังจากอ่านหน้าคนของ Gnome-terminal และค้นหาในเว็บ

Doug Smythies avatar
gn flag
คุณสามารถส่งโทเค็นจาก myscript3 ไปยัง myscript1 โดยพูดผ่านไพพ์ที่มีชื่อ หลังจากทำทุกอย่างแล้ว myscript1 จะรอโทเค็นและ myscript3 จะส่งในเวลาที่เหมาะสมเท่านั้น
sudodus avatar
jp flag
นอกจากนี้ยังสามารถสื่อสารผ่านการมีอยู่ของไฟล์
N. S. avatar
cn flag
@ซูโดดัส หมายถึงไฟล์อะไรคะ?!
sudodus avatar
jp flag
คุณสามารถปล่อยให้กระบวนการในหน้าต่างเทอร์มินัลหนึ่งสร้างไฟล์และตรวจสอบซ้ำๆ และปล่อยให้กระบวนการในหน้าต่างอื่นลบออกเมื่อพร้อม หรือตรงกันข้าม: ปล่อยให้กระบวนการในหน้าต่างเทอร์มินัลรอจนกว่าจะมีไฟล์อยู่ และให้กระบวนการในหน้าต่างอื่นสร้างไฟล์นั้นเมื่อพร้อมชื่อไฟล์อาจเป็นไฟล์ชั่วคราว (หรือชุดของไฟล์ชั่วคราว) และชื่อสามารถควบคุมได้โดย master shellscript ที่เริ่มต้นกระบวนการในหน้าต่างเทอร์มินัลทั้งสี่ - ไฟล์ดังกล่าวสามารถว่างเปล่าหรือมีข้อความ
N. S. avatar
cn flag
ฉันได้สร้างสคริปต์ทุบตี 2 สคริปต์ "A" และ "B" และสคริปต์ "รัน" ที่เรียกใช้ "A" และ "B" พร้อมกัน เนื้อหา "เรียกใช้" คือ: bash ./A & bash ./B & wait ฉันรอใน "A" เพื่อสร้างไฟล์ด้วยคำสั่ง " while" และใน "B" ฉันสร้างไฟล์นั้น แต่ไม่มีการดำเนินการคำสั่งจาก "A"
raj avatar
cn flag
raj
ต้องมีหน้าต่าง `gnome-terminal` แยกกัน 4 บานหรือไม่ หรือสามารถมีหน้าต่างเดียวที่มี 4 เซสชันเทอร์มินัลแบบสลับแยกกันได้หรือไม่ เนื่องจากในกรณีหลัง คุณสามารถใช้สคริปต์ `expect` รวมกับ `screen` (โดยที่คุณเริ่ม 4 เซสชันภายใน `screen`) เพื่อให้ได้พฤติกรรมที่ต้องการ
Score:2
ธง cn

คุณไม่สามารถทำได้ ยกเว้นอาจใช้วิธีแฮ็กโดยใช้การจำลองปุ่มกด เช่น. xdotool เพื่อสลับกลับไปที่หน้าต่างแรก จากนั้นวางคำสั่งบางอย่าง

อาจมีวิธีที่ดีกว่าในการทำสิ่งที่คุณต้องการ อย่างไรก็ตาม เพื่อให้เราให้คำแนะนำได้ดีขึ้น เราจำเป็นต้องรู้ว่าคุณต้องการบรรลุอะไร

N. S. avatar
cn flag
ฉันได้แก้ไขคำถามและเพิ่มคำอธิบายเพิ่มเติมแล้ว ขอบคุณที่รับชมครับ...
Score:1
ธง jp

ลองใช้งานการสาธิตต่อไปนี้ และ

ผู้เชี่ยวชาญ สคริปต์สร้างไฟล์ชั่วคราว (ใน /tmp) และเริ่มต้น สคริปต์ และ b-สคริปต์ ใน เอ็กซ์เทอม หน้าต่าง

ติดตั้ง

sudo apt ติดตั้ง xterm

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

./ผู้เชี่ยวชาญ

ผู้เชี่ยวชาญ:

#!/bin/bash

เสียงสะท้อน "เริ่มต้น $0"

b4a=$(mktemp)

nohup xterm -fa เริ่มต้น -e ./a-script "$b4a" 2> /dev/null &
nohup xterm -fa เริ่มต้น -e ./b-script "$b4a" 2> /dev/null &

ถ้าทดสอบ -f "$b4a"
แล้ว
 rm "$b4a"
ไฟ
echo "$0 จบ"

สคริปต์:

#!/bin/bash

เสียงสะท้อน "เริ่มต้น $0"
echo "$0 ทำได้ที่นี่..."
ในขณะที่ ! ทดสอบ -f "$1"
ทำ
 นอน1
 เสียงสะท้อน -n "."
เสร็จแล้ว
เสียงก้อง ""
echo "$0 ทำได้ที่นี่..."
rm "$1"
อ่าน -p "$0: กด Enter เพื่อเสร็จสิ้น"

b-สคริปต์:

#!/bin/bash

เสียงสะท้อน "เริ่มต้น $0"
echo "$0 ทำได้ที่นี่..."
นอน5
แตะ "$1"
อ่าน -p "$0: กด Enter เพื่อเสร็จสิ้น"
N. S. avatar
cn flag
ขอบคุณสำหรับคำตอบ. ฉันเขียนสคริปต์เหล่านี้แล้ว แต่ฉันคิดว่าปัญหาเกี่ยวข้องกับคอนเทนเนอร์นักเทียบท่าของฉัน! แน่นอน ฉันรันสองคอนเทนเนอร์ใน a-script และ b-script และหลังจากนั้นฉันต้องการเรียกใช้คำสั่งบางอย่างในคอนเทนเนอร์เหล่านี้ เมื่อฉันเขียนคำสั่งบางอย่างใน a-script หลังจาก while วนซ้ำ คำสั่งเหล่านั้นจะไม่ดำเนินการในคอนเทนเนอร์ที่เกี่ยวข้อง
sudodus avatar
jp flag
เหตุใดคุณจึงเรียกใช้คอนเทนเนอร์สองรายการใน a-script และ b-script และทำไมคุณถึงใช้หน้าต่างเทอร์มินัลสี่บาน -- อาจเป็นไปได้ที่จะจัดโครงสร้างของงานด้วยวิธีที่ง่ายกว่า ซึ่งจะทำให้งานมีปัญหาน้อยลง หากคุณบอกเรา (หรือเฉพาะฉัน หากคุณไม่ต้องการเผยแพร่งานนี้) คุณสามารถขอความช่วยเหลือเกี่ยวกับโครงสร้างได้
N. S. avatar
cn flag
ฉันจะบอกเธอคนเดียวได้อย่างไร ขอบคุณสำหรับความช่วยเหลือของคุณ
sudodus avatar
jp flag
@น.ส. คุณสามารถรับ ID ผู้ใช้ได้ที่ [Ubuntu Forums] (https://ubuntuforums.org) และสื่อสารผ่านข้อความ Ubuntu Forums (ID ผู้ใช้ของฉันคือ 'sudodus' ที่นั่นด้วย)
N. S. avatar
cn flag
ฉันขอโทษ. ฉันไม่รู้วิธีสื่อสารกับคุณผ่านฟอรัม Ubuntu! :(

โพสต์คำตอบ

คนส่วนใหญ่ไม่เข้าใจว่าการถามคำถามมากมายจะปลดล็อกการเรียนรู้และปรับปรุงความสัมพันธ์ระหว่างบุคคล ตัวอย่างเช่น ในการศึกษาของ Alison แม้ว่าผู้คนจะจำได้อย่างแม่นยำว่ามีคำถามกี่ข้อที่ถูกถามในการสนทนา แต่พวกเขาไม่เข้าใจความเชื่อมโยงระหว่างคำถามและความชอบ จากการศึกษาทั้ง 4 เรื่องที่ผู้เข้าร่วมมีส่วนร่วมในการสนทนาด้วยตนเองหรืออ่านบันทึกการสนทนาของผู้อื่น ผู้คนมักไม่ตระหนักว่าการถามคำถามจะมีอิทธิพลหรือมีอิทธิพลต่อระดับมิตรภาพระหว่างผู้สนทนา