Lo script della shell non eseguirà il comando cd


15

Ho un gioco basato sul testo, Colossal Cave Adventure, che vorrei lanciare con uno script shell invece di aprire il terminale e digitare cd ~/Desktop/CCAe ./Adventure. Il codice che sto cercando di usare è questo:

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

e il messaggio che ricevo è questo:

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

con opzioni per modificare le preferenze del profilo o riavviare il processo. Ho anche provato a utilizzare il percorso assoluto anziché ~/, e tutti i miei nomi di file sono scritti correttamente e indicano il posto giusto. Che c'è?

Risposte:


16

cd è una shell incorporata. dovresti usare questo:

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

Grazie, non sapevo che cdnon fosse un comando.
Giaphage47,

1
cdsicuramente è un comando! È ciò che è noto come comando incorporato nella shell , come afferma correttamente la risposta di Hastur . I comandi integrati della shell sono spesso chiamati "shell incorporati" o "builtin" in breve, ma sono assolutamente comandi. Ciò che cdnon è è un comando esterno . Ubuntu non ha alcun cd programma (e, in caso affermativo, eseguirlo non avrebbe l'effetto di cambiare la directory nella shell da cui è stata eseguita ). @ Giaphage47
Eliah Kagan,

11

L'errore

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

nasce perché cdè uno dei SHELL BUILTIN COMMANDSe non un eseguibile che trovi fisicamente sul tuo Hard Disk.

Per eseguirlo o gli altri built-incomandi nel tuo script devi passare tutta la linea a una bashchiamata

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

Se non ci sono altri comandi interni che devi eseguire, puoi impostare la directory di lavoro per il gnome terminal, come appena risposto qui :

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

Ad nauseam : ci sono alcune alternative:

Se sei solo in un terminal puoi farlo

  • un aliaslike
    alias Star_My_Game="cd ~/Desktop/CCA; ./Adventure "
    e inseriscilo nel tuo .bashrco in ~/.bash_aliasesmodo da poter eseguire con il singolo comando Start_My_Gamein ogni shell che sarai (è più comodo scegliere un nome più semplice / breve di Start_My_Game ...)

  • o uno script che puoi rendere eseguibile ( chmod u+x MYscript) e inserire il tuo path(in genere ~/binè un buon candidato).

Suppongo che tu possa mettere un link sul desktop che esegua il terminale e modifichi il comportamento iniziale. Dall'aiuto di Gnome

  1. Selezionare Modifica ▸ Preferenze profilo ▸ Titolo e comando.

  2. Seleziona Esegui un comando personalizzato anziché la mia shell.

  3. Nella casella di testo, digitare il comando o la shell desiderata.

  4. Il comando verrà passato al terminale esattamente mentre lo scrivi, inclusi tutti gli argomenti specificati. Le variabili di ambiente verranno ereditate dal terminale in quanto è un processo figlio del terminale.

    Aprire una nuova scheda o finestra Terminale per vedere come viene eseguita la shell o il comando personalizzati


Ma il punto era lanciare da uno script di shell e non dover aprire una finestra terminale.
Giaphage47,

Se vuoi lanciare da uno script è sufficiente uno alias(più accogliente) o uno script nella tua directory ~ / bin, senza avviare un nuovo terminale
Hastur,

Risposta aggiornata nel caso in cui sia necessario di nuovo: è possibile passare cdma è necessario passarlo a bash. Dai un assegno :) -
Hastur,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.