เชลล์สคริปต์จะไม่เรียกใช้คำสั่ง cd


15

ผมมีเกมที่ข้อความที่ถ้ำมหึมาการผจญภัยที่ผมอยากจะเปิดตัวพร้อมกับเชลล์สคริปต์แทนที่จะเปิดสถานีและการพิมพ์และcd ~/Desktop/CCA ./Adventureรหัสที่ฉันพยายามใช้คือ:

#! /bin/bash
gnome-terminal -e 'cd ~/Desktop/CCA/; ./Adventure'

และข้อความที่ฉันได้รับคือ:

There was an error creating the child process for this terminal
Failed to execute child process `cd` (No such file or directory)

ด้วยตัวเลือกในการเปลี่ยนการตั้งค่าโปรไฟล์หรือเปิดกระบวนการอีกครั้ง ฉันได้ลองใช้เส้นทางสัมบูรณ์แทน~/และชื่อไฟล์ทั้งหมดของฉันสะกดถูกต้องแล้วชี้ไปยังตำแหน่งที่ถูกต้อง เกิดอะไรขึ้น?

คำตอบ:


16

cd เป็นเชลล์ในตัว คุณควรใช้สิ่งนี้:

#! /bin/bash
gnome-terminal --working-directory=/home/username/Desktop/CCA/ -e './Adventure'

ขอบคุณฉันไม่ทราบว่าcdไม่ใช่คำสั่ง
Giaphage47

1
cdแน่นอนคือคำสั่ง! มันเป็นสิ่งที่เรียกว่าคำสั่ง shell builtinเนื่องจากคำตอบของ Hasturระบุไว้อย่างถูกต้อง คำสั่ง Shell builtin มักเรียกว่า "shell builtins" หรือ "builtins" โดยย่อ แต่ก็เป็นคำสั่งอย่างแน่นอน สิ่งที่cdไม่ได้เป็นคำสั่งภายนอก Ubuntu ไม่มีcd โปรแกรม (และถ้าเป็นเช่นนั้นการรันมันจะไม่ส่งผลต่อการเปลี่ยนไดเรกทอรีในเชลล์ที่คุณใช้งาน ) @ Giaphage47
Eliah Kagan

11

ข้อผิดพลาด

Failed to execute child process "cd" (No such file or directory)

เกิดขึ้นเพราะ cdเป็นหนึ่งในนั้นSHELL BUILTIN COMMANDSและไม่ใช่ปฏิบัติการที่คุณพบในฮาร์ดดิสก์ของคุณ

ในการเรียกใช้หรือbuilt-inคำสั่งอื่น ๆในสคริปต์ของคุณคุณต้องผ่านทุกบรรทัดไปยังการbashเรียกใช้

 gnome-terminal -e '/bin/bash -c "cd ~/Desktop/CCA/; ./Adventure" '   

หากไม่มีคำสั่งภายในอื่นที่คุณต้องดำเนินการคุณสามารถตั้งค่าไดเรกทอรีการทำงานสำหรับได้gnome terminalตามที่ได้รับคำตอบที่นี่ :

gnome-terminal --working-directory=/home/username/Desktop/CCA/ -e './Adventure'

คลื่นไส้โฆษณา : มีทางเลือกบางอย่าง:

หากคุณอยู่ในอาคารผู้โดยสารคุณสามารถทำได้

  • aliasชอบ
    alias Star_My_Game="cd ~/Desktop/CCA; ./Adventure "
    และใส่ไว้ในของคุณ.bashrcหรือ~/.bash_aliasesเพื่อที่คุณจะสามารถทำงานได้ด้วยคำสั่งเดียวStart_My_Gameในแต่ละเปลือกคุณจะ (มันที่สะดวกสบายมากขึ้นในการเลือกชื่อที่ง่ายสั้น / กว่า Start_My_Game ... )

  • หรือสคริปต์ที่คุณสามารถทำให้ executable ( chmod u+x MYscript) และใส่ในของคุณpath(tipically ~/binเป็นตัวเลือกที่ดี)

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

  1. เลือกแก้ไข▸การตั้งค่าโปรไฟล์▸ชื่อและคำสั่ง

  2. ทำเครื่องหมายเรียกใช้คำสั่งที่กำหนดเองแทนเชลล์ของฉัน

  3. ในกล่องข้อความให้พิมพ์คำสั่งหรือเชลล์ที่ต้องการ

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

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


แต่ประเด็นก็คือต้องเริ่มจากเชลล์สคริปต์และไม่ต้องเปิดหน้าต่างเทอร์มินัล
Giaphage47

หากคุณต้องการเริ่มต้นจากสคริปต์ก็เพียงพอalias(อบอุ่นกว่า) หรือสคริปต์ในไดเรกทอรี ~ / bin ของคุณโดยไม่ต้องเปิด terminal ใหม่
Hastur

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