vte.sh는 내 gnome-terminal 디렉토리를 새 탭에 유지하지 않습니다.

vte.sh는 내 gnome-terminal 디렉토리를 새 탭에 유지하지 않습니다.

저는 gnome-terminal에서 새 탭을 열 때 작업 디렉토리를 유지하곤 했는데 이 기능을 다시 가져오고 싶습니다. 내 연구 /etc/profile.d/vte.sh에서는 내 소싱(Z 쉘 사용)을 지적했지만 ~/.zshrc문제가 바뀌지 않았고 새 탭이 여전히 거기에 있었습니다 ~.

이 기능을 어떻게 복원할 수 있나요? 필요한 경우 이것은 더러운 해킹이 될 수 있습니다.

내 버전

~$ 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이미 하나일지도 몰라임시 파일 시스템귀하의 시스템에서. \cd피하기 위해 사용됨포크 폭탄.

gnome-terminal에서만 이 기능을 사용하려면 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합니다 .~/.zshrc, 신규에는 적합하지 않음윈도우
  • 아래에 복제된 @admirabilis의 해결 방법은 이전에는 작동했지만 이제 탭 키를 사용하여 목차 완성 기능이 중단됩니다.
  • 위의 두 가지 모두 zsh가 Gnome Terminal에서 "사용자 정의 명령"으로 구성되고 zsh가 chsh를 사용하여 기본 쉘로 설정된 경우에 해당됩니다.
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)

관련 정보