쉘 스크립트는 cd 명령을 실행하지 않습니다


15

내가 대신 단자와 입력 개방의 쉘 스크립트를 시작하고 싶다고, 텍스트 기반의 게임, 거대 동굴 모험이 cd ~/Desktop/CCA./Adventure. 내가 사용하려고하는 코드는 다음과 같습니다.

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

그리고 내가받는 메시지는 다음과 같습니다.

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

프로필 기본 설정을 변경하거나 프로세스를 다시 시작하는 옵션이 있습니다. 나는 대신에 절대 경로를 사용하려고 시도 ~/했으며 모든 파일 이름의 철자가 정확하고 올바른 위치를 가리 킵니다. 뭐가 잘못 되었 니?

답변:


16

cd 쉘 내장입니다. 이것을 사용해야합니다 :

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

고맙습니다, 나는 그것이 cd명령 이 아니라는 것을 몰랐습니다 .
Giaphage47'5

1
cd확실히 이다 명령이! 그것은으로 알려져 있습니다 무엇 쉘 내장 명령 으로, Hastur의 대답은 정확하게 상태. 쉘 내장 명령은 종종 "쉘 내장"또는 "빌드 인"으로 불리지 만 절대적으로 명령입니다. 어떤 cd없는 것은입니다 외부 명령 . 우분투에는 cd 프로그램 이 없습니다 ( 그렇다면 프로그램을 실행해도 쉘을 실행 한 쉘의 디렉토리를 변경하는 효과는 없습니다 ). @ Giaphage47
Eliah Kagan

11

오류

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

하드 디스크에서 실제로 찾은 실행 파일 cd중 하나가 아니기 때문에 발생합니다 SHELL BUILTIN COMMANDS.

built-in스크립트에서 다른 명령 을 실행하려면 모든 줄을 bash호출에 전달해야합니다.

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

실행해야하는 다른 내부 명령이없는 경우 여기에gnome terminal 응답 한대로 작업 디렉토리를 설정할 수 있습니다 .

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

광고 구역 : 몇 가지 대안이 있습니다.

당신이 터미널에 있다면

  • alias같은
    alias Star_My_Game="cd ~/Desktop/CCA; ./Adventure "
    과에 넣어 .bashrc또는에서 ~/.bash_aliases그래서 당신이 하나의 명령으로 실행할 수있을 것입니다 Start_My_Game당신이 될 것입니다 각 쉘 (그것은 Start_My_Game보다 간단한 / 짧은 이름을 선택하는 것이 더 아늑한입니다 ...)

  • 또는 실행 가능하게 만들고 ( chmod u+x MYscript) 넣을 수있는 스크립트 path( ~/bin주로 좋은 후보입니다).

터미널을 실행하고 시작 동작을 수정하는 링크를 데스크탑에 넣을 수 있다고 가정합니다. 그놈 도움말에서

  1. 편집 ▸ 프로파일 기본 설정 ▸ 제목 및 명령을 선택하십시오.

  2. 쉘 대신 사용자 정의 명령 실행을 선택하십시오.

  3. 텍스트 상자에 명령 또는 원하는 쉘을 입력하십시오.

  4. 명령은 사용자가 지정한 인수를 포함하여 명령을 작성할 때 정확하게 터미널에 전달됩니다. 환경 변수는 터미널의 자식 프로세스이므로 터미널에서 상속됩니다.

    새 터미널 탭 또는 창을 열어 사용자 정의 쉘 또는 명령이 어떻게 실행되는지 확인하십시오


그러나 요점은 쉘 스크립트에서 시작하는 것이며 터미널 창을 열 필요는 없습니다.
Giaphage47'5

alias스크립트에서 시작하려면 새 터미널을 시작하지 않고 ~ / bin 디렉토리에 (더 아늑한) 또는 스크립트가 충분하다면
Hastur

다시 필요한 경우에 대비하여 답변이 업데이트되었습니다. 전달할 수는 cd있지만 전달해야합니다 bash. 그것을 확인하십시오 :) –
Hastur
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.