쉘 스크립트는 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.