터미널 디렉토리를 변경하고 두 번째 터미널을 여는 쉘 스크립트

터미널 디렉토리를 변경하고 두 번째 터미널을 여는 쉘 스크립트

저는 쉘 스크립트 작성이 처음이고 제 수업 중 하나에 대한 프로그램을 보관하는 폴더의 CD에 스크립트를 작성한 다음 두 번째 터미널을 열고 SSH를 통해 사용 중인 서버에 연결하려고 합니다. 내가 작성한 프로그램을 테스트하기 위해. 문제는 터미널 쉘의 디렉토리를 프로그램이 저장된 디렉토리로 변경하는 방법을 찾을 수 없다는 것입니다.

#!/bin/bash/
gnome-terminal -e "ssh [email protected]";
cd /path/to/dir

문제는 스크립트가 종료된 후에도 작업 디렉터리가 변경되지 않는다는 것입니다(스크립트가 호출될 때와 동일한 상태로 유지됨). "."로 불러보았습니다. 현재 프로세스에서 실행되지만 두 번째 터미널은 열리지 않도록 스크립트 이름 앞에 붙입니다.

세 번째 줄을 다음으로 바꾸는 것을 제외하고는 위와 동일한 작업을 시도했습니다.

gnome-terminal -e "cd /path/to/dir/";

이렇게 하면 두 터미널이 모두 열리지만 경로에 CD를 추가하면 "이 터미널에 대한 하위 프로세스 생성 중 오류 발생: 하위 프로세스 'cd'를 실행할 수 없습니다."와 같은 오류가 발생합니다.

누구든지 이 문제를 해결하는 방법을 알아내도록 도와줄 수 있습니까?

답변1

첫 번째 버전은 먼저 하나를 열고 gnome-terminal닫을 때까지 기다린 다음 새 디렉터리로 변경합니다.

cd두 번째 버전에서는 쉘 대신 명령을 실행하려고 시도 하지만 cd이는 실제 명령이 아니라 쉘 내장입니다. ( type -a cd이것 좀 봐.)

문제는 gnome-terminal표시할 디렉터리를 결정하는 방법입니다. 이 옵션으로 재정의되지 않는 한 일반적으로 현재 작업 디렉토리를 사용합니다 --working-directory.

따라서 다음을 사용할 수 있습니다.

cd /path/to/dir && gnome-terminal

또는

gnome-terminal --working-directory=/path/to/dir

사용 가능한 옵션을 확인하세요 man gnome-terminal.

SSH 부분의 경우 gnome 터미널을 로컬로 실행할지 원격으로 실행할지 결정해야 합니다. 원격 사이트에서 실행하려면 다음을 사용할 수 있습니다.

ssh -X [email protected] gnome-terminal --working-directory=/path/to/dir

로컬 측에서는 다음과 같은 것을 사용할 수 있습니다.

gnome-terminal -e "ssh -t [email protected] bash -c 'cd /path/to/dir && bash -l'";

답변2

스크립트 이름 앞에 점(공백)을 추가하여 스크립트를 실행하면 작업 디렉터리는 변경된 상태로 유지됩니다.

예를 들어, 나는 Python 프로젝트 디렉터리로 이동하는 pj라는 프로젝트를 사용합니다. 여기에는 다음 두 줄이 포함됩니다.

#!/bin/bash
cd /home/pi/python

나는 그것을 실행 가능하게 만든 다음 $PATH에 있는 /usr/sbin에 복사했습니다.

실행하려면 다음을 입력합니다.

. pj         (note the dot and the space)

보라, 그것은 그 디렉토리가 되었고 나를 거기에 남겨두었다.
이보다 더 간단할 수는 없습니다.

관련 정보