간단한 질문은 다음과 같습니다. 특정 디렉터리에서 대화형 bash를 시작해야 하며 bash를 시작하는 명령을 작성할 수 있지만 시스템을 수정할 수는 없습니다. 현재 내 요구에 가장 적합한 명령은 다음과 같습니다.
bash -c 'cd some-directory; bash'
즉, bash를 호출하고 cd
bash 내에서 사용한 다음 그 안에 bash의 하위 인스턴스를 만들어 대화형 bash를 처리합니다.
나는 이것이 세상에서 가장 충격적인 bash 사용이 아니라는 것을 알고 있지만 나에게는 이상해 보입니다. 내가 찾고 있는 것을 성취할 수 있는 더 쉬운 방법이 있습니까?
불필요한 맥락에 대해서만:
이는 docker-compose를 통해 docker 인스턴스에서 (docker exec를 사용하여) 셸을 시작하기 위한 도구의 일부입니다. 나는 프로젝트를 나타내는 약 15개의 도커 컨테이너 중 하나에서 자신을 찾을 수 있습니다. 그 중 일부는 내가 원하는 "기본" 디렉터리를 갖고 있고 일부는 그렇지 않습니다. 이 도구는 격차를 해소하고 한 프로젝트에서 다른 프로젝트로 보다 원활한 전환 경험을 제공하도록 설계되었습니다.
나는 효과가 있다고 생각하지만 포함하지 않는 몇 가지를 시도했습니다.
PWD='~/some/directory' bash
- 그냥 무시됐어bash -i -c "cd ~/some/directory
- 대화형으로 표시된 쉘을 생성하지만 일반 대화형 쉘처럼 입력을 기다리지 않습니다.echo "cd ~/some/directory" | bash --rcfile -"
시도해 볼 가치가 있는
나는 몇 가지가 작동할 것이라는 것을 알고 있지만 내 경우에는 그렇지 않습니다.
- 작업 디렉터리를 변경한 다음 명령을 시작합니다. 저는 docker에 있으므로 호스트의 작업 디렉터리는 중요하지 않습니다. bash가 상위 쉘의 현재 작업 디렉토리가 무엇인지 어떻게 아는지 궁금합니다.
docker-compose
-w
실제로 절대 경로를 사용하지만 물결표를 처리하는 방법을 모르는 경우가 있습니다 .cd ~/some/directory ; bash
- docker-compose에는 실제 실행 파일이 필요합니다.- 컨테이너의 rcfile에 넣거나 "런처" 스크립트를 만듭니다. 어느 정도 작동하지만 외부에서 구성할 수 있고 각 컨테이너를 편집하고 싶지 않습니다.
그럼 제가 무시하고 있는 초기 디렉토리를 설정하는 방법이 있나요, 아니면 이렇게 하는 건가요? 나는 Gnome의 "터미널에서 폴더 열기"와 같은 쉘 통합이 bash에게 시작할 폴더를 알려주기 위해 뭔가를 해야 한다는 것을 알고 있지만 그것이 어떤 마법을 사용하는지 알 수 없습니다.
답변1
현재 쉘을 "exec"로 바꾸는 것은 약간의 개선입니다.
bash -c 'cd somedirectory && exec bash -i'
다음과 같은 것을 넣을 수 있습니다
if [ -n "$STARTDIR" ] ; then
cd "$STARTDIR"
unset STARTDIR
fi
~/.bashrc에서 다음을 사용하십시오.
STARTDIR="/some/directory" bash
다른 파일에 넣어서 사용하셔도 됩니다bash --rcfile ~/changedir
터미널에서 폴더를 여는 프로그램은 쉘에 작업을 요청하는 대신 fork
터미널 에 cd를 요청하거나 chdir /some/directory
와 같은 일련의 시스템 호출을 실행합니다 .exec terminal