Script shell tidak akan menjalankan perintah cd

15

Saya memiliki permainan berbasis teks, Petualangan Gua Kolosal, yang ingin saya luncurkan dengan skrip shell alih-alih membuka terminal dan mengetik cd ~/Desktop/CCAdan ./Adventure. Kode yang saya coba gunakan adalah ini:

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

dan pesan yang saya terima adalah ini:

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

dengan opsi untuk mengubah preferensi profil atau meluncurkan kembali proses. Saya juga telah mencoba menggunakan jalur absolut alih-alih ~/, dan semua nama file saya dieja dengan benar dan menunjuk ke tempat yang tepat. Apa yang salah?

Giaphage47
sumber

Jawaban:

16

cd adalah shell builtin. Anda harus menggunakan ini:

#! /bin/bash
gnome-terminal --working-directory=/home/username/Desktop/CCA/ -e './Adventure'
Taher Khorshidi
sumber
Terima kasih, saya tidak sadar cditu bukan perintah.
Giaphage47
1
cdtentu adalah perintah! Itu yang dikenal sebagai perintah shell builtin , seperti yang dinyatakan oleh jawaban Hastur dengan benar. Perintah builtin shell sering disebut "shell builtin" atau "builtin" untuk jangka pendek, tetapi mereka benar-benar perintah. Apa cdyang bukan merupakan perintah eksternal . Ubuntu tidak memiliki cd program (dan jika benar, menjalankannya masih tidak akan memiliki efek mengubah direktori di shell dari mana Anda menjalankannya ). @ Giaphage47
Eliah Kagan
11

Kesalahannya

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

muncul karena cdmerupakan salah satu SHELL BUILTIN COMMANDSdan bukan yang dapat dieksekusi yang Anda temukan secara fisik di Hard Disk Anda.

Untuk menjalankannya atau built-inperintah lain dalam skrip Anda, Anda harus meneruskan semua baris ke abash doa

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

Jika tidak ada perintah internal lain yang harus Anda jalankan, Anda dapat mengatur direktori kerja untuk gnome terminal, seperti yang baru saja dijawab di sini :

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

Ad mual : ada beberapa alternatif:

Jika Anda hanya berada di terminal, Anda dapat melakukannya

  • sebuah aliasseperti
    alias Star_My_Game="cd ~/Desktop/CCA; ./Adventure "
    dan memasukkannya ke dalam Anda .bashrcatau di ~/.bash_aliasessehingga Anda akan dapat menjalankan dengan perintah tunggal Start_My_Gamedi setiap shell Anda akan (Ini lebih nyaman untuk memilih nama sederhana / pendek daripada Start_My_Game ...)

  • atau skrip yang dapat Anda buat dapat dieksekusi ( chmod u+x MYscript) dan dimasukkan ke dalam path(tip Anda ~/binadalah kandidat yang baik)

Saya kira Anda dapat meletakkan tautan di desktop Anda yang menjalankan terminal dan memodifikasi perilaku awal. Dari bantuan gnome

  1. Pilih Edit ▸ Preferensi Profil ▸ Judul dan Perintah.

  2. Centang Jalankan perintah khusus alih-alih shell saya.

  3. Di kotak teks, ketikkan perintah atau shell yang diinginkan.

  4. Perintah akan diteruskan ke terminal persis seperti yang Anda tulis, termasuk argumen apa pun yang Anda tentukan. Variabel lingkungan akan diwarisi dari terminal karena merupakan proses turunan dari terminal.

    Buka tab atau jendela Terminal baru untuk melihat bagaimana shell atau perintah kustom dijalankan

Cepat
sumber
Tetapi intinya adalah untuk memulai dari skrip shell, dan tidak harus membuka jendela terminal.
Giaphage47
Jika Anda ingin menjalankan dari skrip sudah cukup alias(lebih nyaman) atau skrip di direktori ~ / bin Anda, tanpa harus meluncurkan terminal baru
Hastur
Jawaban dimutakhirkan untuk berjaga-jaga jika Anda perlu lagi: mungkin untuk lulus cdtetapi Anda harus meneruskannya bash. Beri dia cek :) -
Hastur