เปิดโปรแกรมที่รันอยู่แล้วผ่านเทอร์มินัล


10

ฉันจะสลับไปยังโปรแกรมที่รันอยู่โดยใช้เทอร์มินัลได้อย่างไร

สำหรับ examaple:

firefox เปิดหน้าต่าง firefox ใหม่

มีคำสั่งที่จะโฟกัสหน้าต่าง firefox ที่เปิดไปแล้วหรือไม่?


1
จากคำตอบที่ได้รับการยอมรับฉันคิดว่าคุณต้องการเน้นหน้าต่างที่มีอยู่ไม่ใช่เปิดหน้าต่างใหม่ ฉันได้ส่งการแก้ไขเพื่อชี้แจง แต่มันอยู่ระหว่างการตรวจสอบ
jpaugh

คำตอบ:


14

ในฐานะที่เป็นหนึ่งซับ

สมมติว่าคุณติดตั้งwmctrlแล้ว (เรียกใช้sudo apt-get install wmctrlหากไม่ใช่):

คำสั่ง:

wmctrl -ia "$(wmctrl -lp | grep "$(pgrep gedit)" | tail -1 | awk '{ print $1 }')"

จะยกหน้าต่างที่เปิดล่าสุด geditแทนที่ด้วยแอปพลิเคชันอื่น

คำอธิบาย

pgrep gedit

รับ pid ของ gedit

wmctrl -lp

แสดงรายการ windows ทั้งหมดและ pid ที่เป็นของ

awk '{ print $1 }'

แยกออกจากหน้าต่าง ID (สตริงแรกในบรรทัด)

$(wmctrl -lp | grep "$(pgrep gedit)" | tail -1 | awk '{ print $1 }')

ดังนั้นจะค้นหารหัสหน้าต่างของหน้าต่างที่สร้างขึ้นล่าสุดของgedit(ผลลัพธ์ของwmctrl -lpรายการหน้าต่างตามลำดับเวลาของการสร้างหากแอปพลิเคชันมีหลาย windows ให้tail -1ส่งคืนหน้าต่างสุดท้าย)

wmctrl -ia

ต่อมายกหน้าต่างโดย window-id

ในบทเล็ก ๆ

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

#!/bin/bash

wmctrl -ia "$(wmctrl -lp | grep "$(pgrep "$1")" | tail -1 | awk '{ print $1 }')"
  • บันทึกเป็นไฟล์ว่างเปล่าเป็น switchto.sh
  • ทำให้ปฏิบัติการได้
  • เรียกใช้เป็น (เช่น)

    /path/to/switchto.sh firefox
    

ทางเลือก?

ในทางทฤษฎีคำสั่ง:

xdotool search --class gedit windowactivate

ควรทำแบบเดียวกัน ควรเพิ่มหน้าต่างที่พบครั้งแรกของgeditในกรณีนี้
ดูเหมือนว่าแข็งแกร่งน้อยลง ในระบบของฉัน (Unity) ไม่ได้ทำอะไรเลย


1

หากคุณใช้ firefox runned firefox &คุณสามารถใช้jobsเพื่อดูหมายเลข เพื่อนำมาเขียนเบื้องหน้า%n firefoxซึ่งnย่อมาจากจำนวน ตัวอย่าง:

sabrina@ubuntu:~$ jobs
[1]+ Stopped      firefox
sabrina@ubuntu:~$ fg %1

นอกจากนี้คุณสามารถ "ฆ่า" โปรแกรม:

sabrina@ubuntu:~$ kill %1
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.