El script de Shell no ejecutará el comando cd

15

Tengo un juego basado en texto, Colossal Cave Adventure, que me gustaría lanzar con un script de shell en lugar de abrir el terminal y escribir cd ~/Desktop/CCAy ./Adventure. El código que estoy tratando de usar es este:

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

y el mensaje que recibo es este:

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

con opciones para cambiar las preferencias de perfil o reiniciar el proceso. También he intentado usar la ruta absoluta en lugar de ~/, y todos los nombres de mis archivos están escritos correctamente y apuntan al lugar correcto. ¿Qué está mal?

Giaphage47
fuente

Respuestas:

16

cd Es una concha incorporada. deberías usar esto:

#! /bin/bash
gnome-terminal --working-directory=/home/username/Desktop/CCA/ -e './Adventure'
Taher Khorshidi
fuente
Gracias, no sabía que cdno era una orden.
Giaphage47
1
cdCiertamente es un comando! Es lo que se conoce como un comando incorporado de shell , como dice correctamente la respuesta de Hastur . Los comandos de shell incorporados a menudo se denominan "shell builtins" o "builtins" para abreviar, pero son absolutamente comandos. Lo cdque no es es un comando externo . Ubuntu no tiene ningún cd programa (y si lo tuviera, ejecutarlo aún no tendría el efecto de cambiar el directorio en el shell desde el que lo ejecutó ). @ Giaphage47
Kagan
11

El error

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

surge porque cdes uno de losSHELL BUILTIN COMMANDS ejecutables que no se encuentra físicamente en su disco duro.

Para ejecutarlo o los otros built-incomandos en su script, debe pasar toda la línea a una bashinvocación

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

Si no hay otro comando interno que deba ejecutar, puede configurar el directorio de trabajo para gnome terminal, como se acaba de responder aquí :

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

Hasta el hastío : hay algunas alternativas:

Si solo estás en una terminal, puedes hacer

  • un me aliasgusta
    alias Star_My_Game="cd ~/Desktop/CCA; ./Adventure "
    y póngalo en su .bashrco adentro ~/.bash_aliasespara que pueda ejecutar con el comando único Start_My_Gameen cada shell que será (es más acogedor elegir un nombre más simple / corto que Start_My_Game ...)

  • o un script que puede hacer ejecutable ( chmod u+x MYscript) y poner en su path(normalmente ~/bines un buen candidato).

Supongo que puede poner un enlace en su escritorio que ejecute el terminal y modifique el comportamiento inicial. De la ayuda de GNOME

  1. Seleccione Editar ▸ Preferencias de perfil ▸ Título y comando.

  2. Marque Ejecutar un comando personalizado en lugar de mi shell.

  3. En el cuadro de texto, escriba el comando o el shell deseado.

  4. El comando se pasará al terminal exactamente como lo escribe, incluidos los argumentos que especifique. Las variables de entorno se heredarán del terminal, ya que es un proceso secundario del terminal.

    Abra una nueva pestaña o ventana de Terminal para ver cómo se ejecuta el shell o comando personalizado

Hastur
fuente
Pero el punto era iniciar desde un script de shell y no tener que abrir una ventana de terminal.
Giaphage47
Si desea iniciar desde un script, es suficiente un alias(más acogedor) o un script en su directorio ~ / bin, sin iniciar un nuevo terminal
Hastur
Respuesta actualizada en caso de que la necesite nuevamente: es posible pasarla, cdpero debe pasarla bash. Dale un cheque :) -
Hastur