
저는 gnome-terminal에서 새 탭을 열 때 작업 디렉토리를 유지했는데 이 기능을 복원하고 싶습니다. 조사 결과 /etc/profile.d/vte.sh
에 따르면 ~/.zshrc
Z 셸을 사용하는 소스를 사용했지만 문제가 바뀌지는 않았으며 새 탭은 여전히 ~
.
이 기능을 어떻게 복원할 수 있나요? 필요한 경우 더러운 해킹이 될 수 있습니다.
내 버전
~$ uname -a
Linux konradslaptop2 3.17.2-1-ARCH #1 SMP PREEMPT Thu Oct 30 20:49:39 CET 2014 x86_64 GNU/Linux
~$ gnome-terminal --version
GNOME-Terminal 3.14.2
~$ zsh --version
zsh 5.0.7 (x86_64-unknown-linux-gnu)
내 ~/.zshrc(최소한의 예)
. /etc/profile.d/vte.sh
# auto generated by .zsh installation
if (( ${+terminfo[smkx]} )) && (( ${+terminfo[rmkx]} )); then
function zle-line-init () {
printf '%s' "${terminfo[smkx]}"
}
function zle-line-finish () {
printf '%s' "${terminfo[rmkx]}"
}
zle -N zle-line-init
zle -N zle-line-finish
fi
답변1
~/.zshrc
매우 간단한 해결 방법은 작업 디렉토리를 기억하고 zsh를 열 때 해당 디렉토리로 변경하는 함수를 포함시키는 것입니다 .
cd $(<>/dev/shm/$USER-pwd)
__cd(){
\cd "$@"
pwd >/dev/shm/$USER-pwd
}
alias cd=__cd
우리는 사용/dev/shm대신에/tmp디스크 쓰기를 방지하기 위해/tmp이미tmpfs귀하의 시스템에서. \cd
은(는) 방지하기 위해 사용됩니다.포크 폭탄.
gnome 터미널에만 이 기능을 사용하려면 if 문을 포함하여 현재 터미널이나 활성 창을 확인할 수 있습니다. 또한 다른 사용자가 마지막 디렉터리가 무엇인지 알아낼 수 있다는 우려가 있는 경우 다음을 $USER-pwd
사용하여 권한을 수정할 수 있습니다 chmod
.
if xprop -id $(xprop -root 32x ' $0' _NET_ACTIVE_WINDOW | awk '{print $NF}') WM_CLASS | grep -q gnome-terminal; then
cd $(<>/dev/shm/$USER-pwd)
chmod 600 /dev/shm/$USER-pwd
__cd(){
\cd "$@"
pwd >/dev/shm/$USER-pwd
}
alias cd=__cd
fi
답변2
정확히 무엇을 복원하고 싶은지 잘 모르겠습니다(아래 참조).
gnome-terminal
다른 디렉터리에서 시작하여 열려면 디렉터리를 지정하는 옵션이 있습니다.
gnome-terminal --working-directory=/tmp
을 수행한 다음 셸을 시작하는 사용자 정의 시작 명령으로 스크립트를 확실히 사용할 수 있지만 cd
이는 좋은 접근 방식처럼 들리지 않습니다.
새 탭 작업이 트리거되었을 때 현재 탭의 현재 디렉터리로 설정되는 새 탭에 있는 셸의 기본 디렉터리에 관한 경우: 그것은 제게는 효과적이므로 힌트만 제공할 수 있습니다. 이전 버전, GNOME Terminal 3.6.2
.
/etc/profile.d/vte.sh
나는 그것이 디렉토리를 설정하는 스크립트가 아니라고 확신합니다 . 내 버전에서는(잘 작동함) 스크립트에 이와 관련된 코드가 포함되어 있지 않으며 사용한 적이 없습니다.
터미널 프로그램 자체는 쉘 프로세스를 포크하기 전에 디렉토리를 설정할 수 있습니다.
그러나 실제로는 그렇게 할 필요조차 없습니다. 이전과 동일한 디렉터리를 갖고 싶어합니다. 필요한 것은 디렉토리를 전혀 건드리지 않는 것입니다.
즉, 이 문제를 설명하는 버그가 있습니다.
gnome-terminal: 버그 697475 - 새 탭이 이전 탭과 동일한 디렉토리에서 열리지 않습니다.
토론이 너무 길어서 요약할 수 없습니다. vte.sh
거기에서 논의되고 건너뛰기에서 보면 수정될 수도 있지만 아직 완전히 출시되지는 않은 것 같습니다.
답변3
2022년부터 업데이트:
/etc/profile.d/vte.sh
in을 포함하면~/.zshrc
현재 작동하지만 새로운 경우에만 작동합니다.탭, 신규용 아님창문들- 아래에 반복된 @admirabilis의 해결 방법은 이전에는 작동했지만 이제는 탭 키를 사용하여 디렉터리 완성을 중단합니다.
- 위의 두 가지 사항은 Gnome 터미널에서 zsh를 "사용자 정의 명령"으로 구성할 때뿐 아니라 chsh를 사용하여 zsh를 기본 쉘로 설정할 때도 적용됩니다.
cd $(<>/dev/shm/$USER-pwd)
__cd(){
\cd "$@"
pwd >/dev/shm/$USER-pwd
}
alias cd=__cd
버전
흥미롭게도 Gnome Terminal과 ZSH는 모두 8년 전과 동일한 주요 버전을 사용하고 있습니다.
~$ uname -a
Linux archlinux 5.19.5-arch1-1 #1 SMP PREEMPT_DYNAMIC Mon, 29 Aug 2022 15:51:05 +0000 x86_64 GNU/Linux
~$ gnome-terminal --version
# GNOME Terminal 3.44.1 using VTE 0.68.0 +BIDI +GNUTLS +ICU +SYSTEMD
~$ zsh --version
zsh 5.9 (x86_64-pc-linux-gnu)