Shell script sẽ không chạy lệnh cd


15

Tôi có một trò chơi dựa trên văn bản, Colossal Cave Adventure, mà tôi muốn khởi chạy với một kịch bản shell thay vì mở terminal và gõ cd ~/Desktop/CCA./Adventure. Mã tôi đang cố sử dụng là đây:

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

và tin nhắn tôi nhận được là đây:

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

với các tùy chọn để thay đổi tùy chọn hồ sơ hoặc khởi chạy lại quá trình. Tôi cũng đã thử sử dụng đường dẫn tuyệt đối thay vì ~/và tất cả các tên tệp của tôi được viết đúng chính tả và trỏ đến đúng nơi. Chuyện gì thế?

Câu trả lời:


16

cd là một vỏ dựng sẵn. bạn nên sử dụng cái này:

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

Cảm ơn bạn, tôi đã không biết rằng đó cdkhông phải là một lệnh.
Giaphage47

1
cdchắc chắn một mệnh lệnh! Đó là những gì được gọi là lệnh dựng sẵn shell , như câu trả lời chính xác của Hastur . Các lệnh dựng sẵn của Shell thường được gọi là "shell dựng" hoặc "nội dung", nhưng chúng hoàn toàn là các lệnh. Những gì cdkhông phải là một lệnh bên ngoài . Ubuntu không có cd chương trình (và nếu có, chạy nó vẫn không có tác dụng thay đổi thư mục trong shell mà bạn chạy nó ). @ Giaphage47
Eliah Kagan

11

Lỗi

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

phát sinh vì cdlà một trong SHELL BUILTIN COMMANDSvà không phải là tệp thực thi mà bạn tìm thấy trên Đĩa cứng.

Để chạy nó hoặc các built-inlệnh khác trong tập lệnh của bạn, bạn cần chuyển tất cả các dòng cho một bashlời mời

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

Nếu không có lệnh nội bộ nào khác mà bạn phải thực thi, bạn có thể đặt thư mục làm việc cho gnome terminal, như vừa trả lời ở đây :

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

Quảng cáo nauseam : có một số lựa chọn thay thế:

Nếu bạn chỉ ở trong một thiết bị đầu cuối, bạn có thể làm

  • một lượt aliasthích
    alias Star_My_Game="cd ~/Desktop/CCA; ./Adventure "
    và đặt nó vào .bashrchoặc ~/.bash_aliasesđể bạn có thể chạy với một lệnh duy nhất Start_My_Gametrong mỗi shell bạn sẽ thấy (Thật ấm cúng hơn khi chọn một tên đơn giản / ngắn hơn Start_My_Game ...)

  • hoặc một tập lệnh mà bạn có thể thực hiện ( chmod u+x MYscript) và đặt vào path( của bạn ~/binlà một ứng cử viên tốt).

Tôi cho rằng bạn có thể đặt một liên kết trên máy tính để bàn thực thi thiết bị đầu cuối và sửa đổi hành vi bắt đầu. Từ gnome giúp

  1. Chọn Chỉnh sửa Preferences Tùy chọn hồ sơ ▸ Tiêu đề và lệnh.

  2. Kiểm tra Chạy một lệnh tùy chỉnh thay vì vỏ của tôi.

  3. Trong hộp văn bản, nhập lệnh hoặc vỏ mong muốn.

  4. Lệnh sẽ được chuyển đến thiết bị đầu cuối chính xác như bạn viết, bao gồm mọi đối số mà bạn chỉ định. Các biến môi trường sẽ được kế thừa từ thiết bị đầu cuối vì đây là một quá trình con của thiết bị đầu cuối.

    Mở tab Terminal hoặc cửa sổ mới để xem cách shell hoặc lệnh tùy chỉnh thực thi


Nhưng vấn đề là khởi chạy từ tập lệnh shell và không phải mở cửa sổ terminal.
Giaphage47

Nếu bạn muốn khởi chạy từ một tập lệnh là đủ alias(ấm hơn) hoặc tập lệnh trong thư mục ~ / bin của bạn, mà không cần khởi chạy một thiết bị đầu cuối mới
Hastur

Câu trả lời được cập nhật chỉ trong trường hợp bạn cần một lần nữa: có thể vượt qua cdnhưng bạn cần chuyển nó đến bash. Hãy kiểm tra xem :) -
Hastur
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.