ทำไมไฟล์สั่งการของฉันไม่ทำงานเมื่อฉันคลิก


3

ทำไมดูเหมือนว่าฉันไม่สามารถเปิดไฟล์ปฏิบัติการที่สร้างขึ้นบน C ++ โดยดับเบิลคลิก

ฉันมีไฟล์ที่ฉันเรียกใช้จาก IDE และฉันต้องการทราบว่ามีวิธีตั้งค่าไฟล์นั้นเป็น Open terminal เมื่อคลิกหรือไม่เช่นเดียวกับไฟล์. exe บน windows ที่จะทำ

เป็นไปได้:

  • รหัส C ++ ฉันสามารถเพิ่มรหัสต้นฉบับของฉันที่จะอนุญาตให้นี้

  • กำหนดค่า My Pc เพื่อเปิด

ฉันพยายามที่จะหลีกเลี่ยงชุดเครื่องมือเป็นไปได้ฉันเพิ่งรวบรวมแอปพลิเคชันบน Windows (ขอบคุณลูกพี่ลูกน้องของฉันเขามีพีซีที่มี windows)

และมันจะยอดเยี่ยมมากถ้าทำได้เช่นเดียวกันสามารถทำได้บน Windows บน Linux เพราะเรามีโฟลเดอร์ของ Release 2 ตัว

และฉันต้องการแอพที่ใช้เทอร์มินัลที่เรียบง่ายนี้สามารถทำงานได้โดยไม่ต้องเป็นผู้เชี่ยวชาญ


ฉันได้เพิ่มบรรทัดนี้:

ระบบ ( "คำพังเพยขั้ว");

มันเปิดใน terminal แต่เพียงแสดงเส้นทางของไฟล์ไม่ใช่โปรแกรมจริง ๆ ข้อเสนอแนะ?


@Leandro แทนที่จะเพิ่ม "คำตอบ" เพื่อเพิ่มรายละเอียดหรือตอบกลับผู้ตอบโปรดแก้ไขคำถาม (เพื่อเพิ่มรายละเอียด) หรือใช้ "เพิ่มความคิดเห็น" (เพื่อตอบกลับคนอื่น ๆ )
Marc Gravell

คำตอบ:


6

ฉันคาดหวังว่าคุณจะต้องตั้งค่าบิต "ปฏิบัติการ" ในไฟล์ที่ออกโดยคอมไพเลอร์ Linux C ++ ฉันไม่คิดว่ามันจะทำโดยค่าเริ่มต้นด้วยเหตุผลด้านความปลอดภัย

เพียงแค่ "cd" ไปยังไดเรกทอรีที่สร้างไฟล์ปฏิบัติการได้

chmod +x myexecutable

การแทนที่ "myexecutable" ด้วยชื่อของเอาต์พุตคอมไพเลอร์ของคุณ

จากนั้นลองเรียกใช้ด้วย. / myexecutable

ฉันเชื่อว่าสิ่งนี้ควรทำให้โปรแกรม "runnable" โดยใช้การคลิกเมาส์เช่นเดียวกับคอนโซล

ในทำนองเดียวกันหากคุณต้องการเรียกใช้คำสั่ง "script" คุณสามารถลองทำสิ่งต่อไปนี้ในไฟล์สคริปต์ให้บันทึกสิ่งนี้เป็น "myexe.sh" หรือสิ่งที่คล้ายกัน:

#!/bin/sh
command1
command2

จากนั้นใช้อีกครั้ง

chmod +x myexe.sh 

เพื่อให้คุณสามารถเรียกใช้สคริปต์ได้โดยคลิกที่มัน


@Leandro ผมได้แก้ไขคำตอบของฉันที่จะชี้แจงคุณควรจะสามารถเรียกใช้โปรแกรมของคุณใน terminal โดยใช้สคริปต์ง่าย
Mokubai

สคริปต์ของ wrapper นั้นซ้ำซ้อน
Lie Ryan

@LieRyan ฉันก็ไม่แน่ใจว่า Linux จะเปิดเทอร์มินัลโดยอัตโนมัติสำหรับโปรแกรมที่ไม่ใช่ gui หรือไม่ดังนั้นจึงวางไว้ที่นั่นเพื่อให้แน่ใจว่า ...
Mokubai

ดีฉันเปลี่ยนนามสกุลไฟล์เพื่อดวลจุดโทษและทำงาน
Leandro

@Mokubai คุณต้องใช้แอปพลิเคชั่นเทอร์มินัลเพื่อทำเช่นนั้น @Leandro นี่เป็นเพราะตัวจัดการหน้าต่าง / ตัวจัดการไฟล์ถูกกำหนดค่าให้รันเชลล์สคริปต์ภายในเทอร์มินัล ในทางพฤติกรรมดังกล่าวขึ้นอยู่ไม่ว่าวิธีที่เหมาะสมที่สุดในการทำสิ่ง ...
bubu

3

ฉันคิดว่ารากของปัญหาของคุณคือคุณไม่เข้าใจความแตกต่างระหว่าง Terminal Emulator และ Shell และวิธีที่ Linux คิดวิธีเริ่มกระบวนการ

อย่างแรกคือมี "Terminal Emulator" ในสภาพแวดล้อมที่ใช้ Gnome ซึ่งมักจะเป็น Gnome Terminal

จากนั้นมี "เชลล์" ใน Linux ซึ่งมักจะเป็น bash ถึงแม้ว่าเชลล์อื่น ๆ จะเป็นไปได้

"Shell" ทำงานภายใน "Terminal Emulator" ความแตกต่างนี้มาจากอายุของเทอร์มินัลฟิสิคัลซึ่งฟิสิคัลเทอร์มินัลคือฮาร์ดแวร์ที่รับอินพุตเขียนข้อความเป็นสี ฯลฯ และเชลล์เป็นซอฟต์แวร์ที่ประมวลผลคำสั่งผู้ใช้และจัดการกระบวนการอื่น ๆ ตามคำสั่งที่กำหนด

ทุกวันนี้เรามีหน้าจอวัตถุประสงค์ทั่วไปที่สามารถแสดงภาพใด ๆ ดังนั้นเราจึงไม่ใช้เทอร์มินัลทางกายภาพอีกต่อไป แต่มี "เทอร์มินัลอีมูเลเตอร์" ซึ่งเป็นซอฟต์แวร์ที่เลียนแบบการทำงานของเทอร์มินัลทางกายภาพและเชลล์ เชลล์ ole 'เหมือนเดิม (ดีเชลล์ทันสมัยใช้ประโยชน์จากการอยู่ในซอฟต์แวร์เทอร์มินัลอีมูเลเตอร์เช่นไม่ได้ถูก จำกัด โดยข้อ จำกัด ทางกายภาพของกระดาษ ฯลฯ แต่ยังคงมีการแบ่งแยก)

"Shell" ไม่ได้ทำงานใน Terminal Emulator เสมอไป นอกจากนี้ยังมี Graphical Shell เช่น Nautilus (คำใบ้คำใบ้ Nautilus เป็นชื่อของสัตว์ทะเลที่มีเปลือกหอยขนาดใหญ่) หรือ Windows Explorer (เพื่อไม่ให้สับสนกับ Internet Explorer)

ทั้งในเชลล์บรรทัดคำสั่งเช่น bash และเชลล์แบบกราฟิกเช่น Nautilus ไฟล์เรียกทำงานจะถูกทำเครื่องหมายด้วยการexecuteตั้งค่าบิต

ในเชลล์บรรทัดคำสั่งคุณสามารถใช้ls -lเพื่อดูบิตสิทธิ์ของไฟล์เช่น rwxrwxrwx หมายความว่าทุกคนสามารถอ่าน / เขียน / รันโปรแกรม rwxr-xr-- หมายถึงเจ้าของมีสิทธิ์เต็มรูปแบบคนในกลุ่มของไฟล์สามารถอ่านและดำเนินการ แต่ไม่เขียนและคนอื่นสามารถอ่านไฟล์ได้เท่านั้น ใน Nautilus คุณสามารถคลิกขวาที่ไฟล์> Properties> Permission tab ในหน้าคุณสมบัติการอนุญาตคุณสามารถรับอนุญาตของไฟล์คล้ายกับในเชลล์บรรทัดคำสั่ง

ไฟล์ที่มีชุดบิตเรียกใช้งานจะถือว่าเป็นไฟล์ปฏิบัติการและสามารถเรียกใช้งานได้โดยการทำ. / filename (เชลล์บรรทัดคำสั่ง) หรือดับเบิลคลิก (เชลล์กราฟิก)

สุดท้ายมีรายละเอียดปลีกย่อยอีกเล็กน้อยเกี่ยวกับวิธีที่เชลล์เรียกใช้งานไฟล์ ในเชลล์ Linux ส่วนใหญ่คุณสามารถ "เรียกใช้งาน" สคริปต์ที่เขียนใน python / perl / php / bash ที่ไม่ใช่ไฟล์ที่คอมไพล์ได้ เนื่องจากไฟล์เหล่านี้ไม่สามารถทำการประมวลผลได้อย่างเป็นธรรมชาติจึงจำเป็นต้องมีตัวแปลภาษา (เช่นตัวแปลภาษาไพ ธ อน) ไม่เหมือนกับใน Windows shell (Explorer) ซึ่งเป็นตัวแปลภาษาที่จะเรียกใช้ผ่านส่วนขยายของไฟล์ Linux shells แสดงล่ามที่ถูกต้องโดยดูที่บรรทัด "hashbang" ที่มีลักษณะเช่นนี้

#!/usr/bin/python

เมื่อบิตการดำเนินการของไฟล์ถูกตั้งค่าและไฟล์มีบรรทัด hashbang นี้เชลล์จะเรียกใช้ interpreter / usr / bin / python พร้อมกับไฟล์ปัจจุบันเป็นอาร์กิวเมนต์

Nautilus สามารถจดจำเมื่อโปรแกรมเป็นแอปพลิเคชันบรรทัดคำสั่งและจะเสนอให้คุณเรียกใช้แอปพลิเคชันภายในเทอร์มินัล เมื่อคุณคลิกสองครั้งที่สคริปต์ที่เรียกใช้งานได้ Nautilus จะถามว่าคุณต้องการเรียกใช้งานใน Terminal หรือไม่โดยไม่มี Terminal หรือแก้ไขไฟล์ใน Text Editor


1

สร้างสคริปต์เพื่อดำเนินการภายใน xterm หรืออะไรบางอย่าง ตรวจสอบให้แน่ใจว่าโปรแกรมของคุณโต้ตอบกับผู้ใช้ก่อนสิ้นสุด (มันทำงานเมื่อคุณเรียกใช้ภายใน xterm หรือไม่มันทำงานเมื่อคุณเรียกใช้ภายในเปลือกทุบตีทั่วไป?)

คำสั่ง xterm -e [args1 args2]

คุณช่วยให้ฉันข้อมูลเพิ่มเติมเกี่ยวกับเรื่องนี้ได้ไหม
Leandro

โดยการทุบตีที่คุณหมายถึงเทอร์มิ im ... ขออภัยไม่คุ้นเคยกับทุบตีฉันเพียงแค่ใช้มันครั้งเพื่อสี promtp
Leandro

พรอมต์คำสั่งที่คุณมีในโหมดข้อความ linux คือเชลล์ ส่วนใหญ่มันทุบตี ในสถานการณ์ที่หายากเปลือกเริ่มต้นอาจเป็น tcsh หรือ zsh เช่นกัน แต่อีกครั้งนี้เป็นของหายาก ใน X คุณต้องใช้โปรแกรมเพื่อให้หน้าต่างมีข้อความดังนั้นหน้าต่างเทอร์มินัลมักจะเป็นเช่นเทอร์มินัล gnome ที่กำลังรัน bash
bubu

1

ในคำง่าย ๆ :

  1. ไฟล์ไบนารีที่สร้างขึ้นได้ของคุณอาจไม่มีบิตที่ปฏิบัติการได้ ระบบที่ใช้ Unix ใช้คุณสมบัตินี้เพื่อความปลอดภัย ตั้งค่าด้วย: chmod +x yourbinary.
  2. ไบนารีอาจถูกดำเนินการจริง ๆ แต่เนื่องจาก linux ไม่ได้เรียกใช้เทอร์มินัลอีมูเลเตอร์ (ซึ่งค่อนข้างเหมือนกับอินเทอร์เฟซระหว่างคุณและstdout) เพื่อให้รันได้โดยค่าเริ่มต้นคุณจึงไม่เห็นอะไรเลย

สำหรับกรณีหลังคุณสามารถ:

  1. สร้างสคริปต์ที่รันไฟล์สั่งงานของคุณผ่านเทอร์มินัลอีมูเลเตอร์เช่น:

    exo-open --launch TerminalEmulator -e 'yourbinary'
    

    เมื่อต้องการเรียกใช้บนเทอร์มินัลเริ่มต้นของคุณ (ถ้าคุณมีexoคำสั่ง) หรือใช้อย่างใดอย่างหนึ่ง

  2. สร้างdesktopไฟล์เพื่อเรียกใช้

  3. ให้พวกเขากำหนดเองส่วนขยายพิเศษเช่น.execและกำหนดค่าให้ทำงานโดยใช้คำสั่งตามคำแนะนำ 1 (หรือคล้ายกัน) ในการตั้งค่านามสกุลไฟล์ของคุณ (หากระบบปฏิบัติการของคุณรองรับคุณสมบัตินั้น)


0

หากคุณได้รวบรวมไว้ใน windows และเป็น exe ฉันเห็นเหตุผลว่าทำไมเทอร์มินัลไม่ควรเปิดบน windows เมื่อคุณดับเบิลคลิกที่ปฏิบัติการ คุณแน่ใจหรือว่ารหัสไม่ได้ปิด (segfault เป็นต้น)? มันจะเป็นความคิดที่ดีเพื่อให้แน่ใจว่าโปรแกรมไม่ผิดพลาด


หนึ่งใน Windows ทำงานได้อย่างสมบูรณ์เป็นหนึ่งที่รวบรวมบน Linux ที่ฉันสามารถหาวิธีที่จะเปิดมันราวกับว่ามันเป็น windows. exe บนระบบปฏิบัติการตามลำดับ
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.