Script de shell não executará o comando cd

12

Eu tenho um jogo baseado em texto, Colossal Cave Adventure, que eu gostaria de lançar com um script de shell em vez de abrir o terminal e digitar cd ~/Desktop/CCA e ./Adventure . O código que estou tentando usar é o seguinte:

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

e a mensagem que recebo é esta:

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

com opções para alterar as preferências de perfil ou relançar o processo. Eu também tentei usar o caminho absoluto em vez de ~/ , e todos os nomes dos meus arquivos estão escritos corretamente e apontam para o lugar certo. O que está errado?

    
por Giaphage47 28.05.2014 / 07:49

2 respostas

11

cd é um shell embutido. você deveria usar isto:

#! /bin/bash
gnome-terminal --working-directory=/home/username/Desktop/CCA/ -e './Adventure'
    
por Taher Khorshidi 28.05.2014 / 08:10
10

O erro

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

surge porque cd é um dos SHELL BUILTIN COMMANDS e não é um executável encontrado fisicamente no seu disco rígido.

Para executá-lo ou aos outros built-in comandos em seu script, você precisa passar toda a linha para uma bash invocação

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

Se não houver outro comando interno que você tenha que executar, você pode definir o diretório de trabalho para o gnome terminal , como acabamos de responder aqui :

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

Ad nauseam : existem algumas alternativas:

Se você está apenas em um terminal, você pode fazer

  • um alias como alias Star_My_Game="cd ~/Desktop/CCA; ./Adventure "
    e coloque em seu .bashrc ou em ~/.bash_aliases para que você possa rodar com o único comando Start_My_Game em cada shell que você será (é mais confortável escolher um nome simples / curto que o Start_My_Game ... )

  • ou um script que você pode tornar executável ( chmod u+x MYscript ) e colocar em seu path (tipicamente ~/bin é um bom candidato).

Suponho que você pode colocar um link em sua área de trabalho que execute o terminal e modifique o comportamento inicial. Da ajuda do gnome

  1. Selecione Editar ▸ Preferências de perfil ▸ Título e comando.

  2. Marque Executar um comando personalizado em vez do meu shell.

  3. Na caixa de texto, digite o comando ou o shell desejado.

  4. O comando será passado para o terminal exatamente como você o escreve incluindo quaisquer argumentos que você especificar. Variáveis de ambiente ser herdado do terminal, pois é um processo filho do terminal.

    Abra uma nova guia ou janela do Terminal para ver como o shell personalizado ou comando executa

por Hastur 28.05.2014 / 08:07