สร้างไฟล์ .desktop ที่เปิดและดำเนินการคำสั่งในเทอร์มินัล


39

ฉันต้องการทราบวิธีการเขียนExecคำสั่งของไฟล์ .desktop เพื่อเปิดเทอร์มินัลใหม่และเรียกใช้งานเชลล์สคริปต์ในนั้น เชลล์สคริปต์ทำงานและเข้าถึงได้โดยผู้ใช้ทั้งหมด เมื่อเปิดใช้งานสคริปต์จากเทอร์มินัลทุกอย่างทำงานได้ แต่จะไม่เมื่อพยายามเปิดใช้งานสคริปต์จากไฟล์ .desktop

นี่คือชุดค่าผสมบางส่วนที่ฉันได้ลองไปแล้ว:

Exec=gnome-terminal -x sh -c 'echo hello'
Exec=sh -c 'gnome-terminal echo hello'
Exec=sh -c 'echo hello'
Exec=echo hello

ตัวเลือกเทอร์มินัล .desktop ถูกตั้งค่าเป็นจริง

คำตอบ:


46

เนื้อหาของไฟล์เดสก์ท็อปของคุณควรมีลักษณะ (ดูวิธีสร้างไฟล์ .desktop โดยใช้โปรแกรมแก้ไขข้อความ ):

[Desktop Entry]
Version=1.0
Name=Test        
Comment=Test the terminal running a command inside it
Exec=gnome-terminal -e "bash -c 'echo hello;$SHELL'"
Icon=utilities-terminal
Terminal=false
Type=Application
Categories=Application;

หรือ:

[Desktop Entry]
Version=1.0
Name=Test        
Comment=Test the terminal running a command inside it
Exec=bash -c 'echo hello;$SHELL'
Icon=utilities-terminal
Terminal=true 
Type=Application
Categories=Application;

ในกรณีแรกTerminalเขตข้อมูลถูกตั้งค่าเป็นfalse(อาจขัดแย้งกับความคาดหวังของคุณ) และในกรณีที่สองถูกตั้งค่าเป็นtrueแต่ผลลัพธ์จะเป็นเหมือนกันทั้งสองกรณี


1
วิธีแก้ปัญหาแรกใช้ได้สำหรับฉันดังนั้นฉันจึงติดกับมัน คุณรู้หรือไม่ว่าทำไมต้องเป็น $ SHELL
Paradiesstaub

1
@Thibaut ใช่แน่นอน
Radu Rădeanu

มันใช้งานได้สำหรับฉัน แต่ฉันต้องการเปิดใช้งานคำสั่งด้วย sudo จากนั้นเมื่อใช้ตัวเรียกใช้งานสร้างขึ้นมันจะเปิด terminal โดยขอรหัสผ่าน ฉันจะเรียกใช้คำสั่งและป้องกันพฤติกรรมนี้ได้อย่างไร
E_Angel

1
@EliasAlves ช้าไปหน่อย แต่สำหรับทุกคนที่อ่านสิ่งนี้: คุณไม่สามารถคาดหวังว่าจะเรียกใช้คำสั่งที่ต้องใช้สิทธิ์พิเศษโดยไม่จำเป็นต้องพิสูจน์ตัวตนของคุณเอง (เว้นแต่คุณจะกำหนดค่าระบบของคุณให้ชัดเจนซึ่งโดยทั่วไปแล้วเป็นความคิดที่ไม่ดี )
code_dredd

ฉันคิดว่าคำถามคือ: วิธีการทำให้แน่ใจว่าขั้วปรากฏขึ้นเพื่อให้ขั้วไม่ได้หายไปเพื่อให้เราสามารถป้อนข้อมูลประจำตัว
RockScience

2
!#/bin/bash

gnome-terminal -e YOUR_COMMANDS

ทำไฟล์ด้านบน อย่าลืมsudo chmod +x filename.sh


1
ปัญหาเกี่ยวกับการแก้ไขปัญหานี้คือว่าเครื่องจะหายไปทันทีและผู้ใช้ไม่สามารถป้อนบางสิ่งบางอย่าง
Paradiesstaub

ฉันลืมสิ่งที่เรียกว่า แต่ฉันคิดว่ามีตัวเลือกในการรักษา terminal ขึ้น อาจเป็นhold
Mr.Lee

2

เพียงเพิ่ม

;$SHELL 

ในตอนท้ายของคำสั่งของคุณ

เช่นเดียวกับฉันsnapdไม่ใช่สิ่งที่ใช้แบนด์วิดท์เต็มของระบบเพื่อรีเฟรช snapshot เกือบทุกครั้งที่ฉันทำงานตอนกลางคืน

ดังนั้นนี่ใช้งานได้สำหรับฉันในการสร้าง.shไฟล์ที่เชื่อมโยงกับ.desktopไฟล์
เนื้อหาสำหรับ.shไฟล์คือ

echo <your password> | sudo -S systemctl stop snapd.service
sudo systemctl disable snapd.service;$SHELL

-Sในบรรทัดแรกของ.shไฟล์ที่ใช้ในการส่งSTDINPUTไปที่sudoความหมายคำสั่งโดยตรงดำเนินการโดยไม่ต้องป้อนรหัสผ่าน

เนื้อหาของ.desktopไฟล์คือ:

[Desktop Entry]
Version=1.0
Name=Test
Comment=Test the terminal running a command inside it
Exec=gnome-terminal -e "/scripts/disable_snap.sh"
Icon=terminal
Terminal=true
Type=Application
Categories=Application;

0

ฉันทำนี่. บรรทัดแรกของไฟล์ข้อความคือ! # / bin / bash

บรรทัดต่อมาของไฟล์ข้อความคือคำสั่ง (เชลล์สคริปต์)

บันทึกไฟล์เป็น something.sh

เปิดคุณสมบัติของไฟล์และเปิดใช้งานไฟล์รันเป็นโปรแกรม

ตอนนี้เมื่อไฟล์ถูกดับเบิลคลิกฉันได้รับตัวเลือกให้เรียกใช้


2
เหมือนกันที่นี่สถานีจะหายไปทันที
Paradiesstaub

มันใช้งานได้สำหรับฉันไม่มีปัญหา สร้างเชลล์สคริปต์เพิ่มบรรทัด! # / bin / bash เป็นบรรทัดแรก อนุญาตให้เรียกใช้ไฟล์เป็นไฟล์เรียกทำงาน ดับเบิลคลิกแล้วเลือก run in terminal มันใช้งานได้
อาหาร

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