/asdf/qwer/dfgh/wert/asdf/qwer 디렉터리에서 코드를 개발 중이고 내 경로에 약 3개의 비슷한 디렉터리를 추가하고 여러 알 수 없는 환경 변수를 설정했다고 가정해 보겠습니다. 그런 다음 다른 터미널을 열고 동일한 방식으로 설정해야 한다는 것을 깨달았습니다. (필요가 다시 발생하지 않았기 때문에 그냥 .bashrc를 변경했습니다.) 이와 똑같은 새 터미널 창을 여는 명령이 있습니까?
답변1
명령줄에서 터미널 프로그램을 실행할 수 있다면 경로를 쉽게 복제할 수 있습니다. 를 사용하고 있다고 가정하면 복제하려는 터미널의 프롬프트에서 실행하면 xterm
됩니다 . xterm &
새 xterm은 로그인 쉘로 시작하도록 구성하지 않는 한 동일한 디렉토리에서 시작됩니다. 내보낸 환경 변수도 모두 유지되지만 내보내지 않은 변수는 유지되지 않습니다.
전체 환경(내보내지 않은 변수 포함)을 복제하는 빠르고 더러운 방법은 다음과 같습니다.
# from the old shell:
set >~/environment.tmp
# from the new shell:
. ~/environment.tmp
rm ~/environment.tmp
사용자 정의 셸 옵션을 설정한 경우 해당 옵션도 다시 적용해야 합니다.
전체 프로세스를 실행하기 쉬운 스크립트로 래핑할 수 있습니다. 스크립트가 환경을 알려진 파일에 저장한 다음 실행하도록 합니다 xterm
. .bashrc에서 해당 파일을 확인하고 가져오고 발견되면 삭제합니다.
또는 한 터미널을 다른 터미널에서 시작하고 싶지 않거나 더 많은 제어를 원하는 경우 .bashrc에 정의된 함수 쌍을 사용할 수 있습니다.
putstate () {
declare +x >~/environment.tmp
declare -x >>~/environment.tmp
echo cd "$PWD" >>~/environment.tmp
}
getstate () {
. ~/environment.tmp
}
편집하다: putstate
다른 방법과 일치하도록 쉘 변수의 "내보낸" 상태를 복사하도록 변경되었습니다. 쉘 옵션(참고자료 참조)과 같은 다른 항목을 복사하는 것도 가능하므로 help set
이 스크립트에는 개선의 여지가 있습니다.
답변2
screen
정의된 환경(GNU 화면)에서 시작하는 경우 해당 환경은 screen
하위 프로세스(예: GNU 화면)에서 사용되며 이를 사용하여 새 터미널을 생성할 수 있습니다.하지만다시 포크하려는 경우(a screen
in a screen
) 까다로워지기 시작합니다.
답변3
비슷한 상황에서는 현재 쉘과 동일한 디렉토리에서 새 쉘을 시작하는 것도 유용하다고 생각합니다. 나는 쉘을 시작하기 위해 이와 같은 레시피를 사용합니다.
exec ssh -t $HOST "cd $DIR; $SHELL $parms"
-t 옵션은 ssh를 사용하여 명시적으로 셸을 실행할 때마다 필요합니다. 프로세스에 대해 의사 tty가 생성됩니다. 이는 히스토리 명령 및 기타 대화형 기능이 제대로 작동하는 데 필요합니다. 스크립트의 처음 몇 줄은 DIR을 현재 디렉터리로 설정하고 SHELL을 사용자가 선호하는 셸로 설정합니다.
답변4
내보낸 변수는 위의 "getstate" 함수를 사용하여 반대편으로 이동하지만 어떤 이유로 인해 그곳으로 내보내지지 않습니다(파이썬에서 간단한 os.getenv를 사용하여 볼 수 있듯이). getstate를 별칭으로 수정하면 나에게 더 잘 작동하는 것 같습니다.
alias getstate=". ~/environment.tmp"