Xshell이 현재 작업 디렉토리를 알아내는 방법

PROBLEM DESCRIPTION or QUESTION



Xshell에서 Xftp를 호출할 때, 작업 디렉토리가 반영되지 않습니다.

RESOLUTION


Xshell에서 현재 작업 중인 디렉토리를 알고 있어야 가능한 작업들은 다음과 같습니다.

  • Xshell에서 세션 복제 시 작업 중인 디렉토리로 이동하기
  • Xshell에서 Xftp 호출 시 작업 중인 디렉토리로 이동하기
  • 파일 매니저를 켠 후 현재 작업 디렉토리의 파일 및 디렉토리가 파일 매니저에 표시되도록 하기

위 기능들이 제대로 작동하기 위해서는 터미널에서 Xshell에게 현재 작업 디레토리를 알리는 설정을 해야 합니다.

  1. 터미널 타이틀을 변경하도록 하는 설정: \033(\e)]0;\007(\a) 코드 사이의 메시지가 터미널 타이틀에 표시됩니다.
  2. 명령 프롬프트가 나올 때마다 명령이 실행되도록 하여야 합니다.
    BASH의 경우 PROMPT_COMMAND 환경 변수나 PS1 환경 변수를 이용할 수 있습니다.


기본적으로는 터미널 에뮬레이터는 사용자가 어느 디렉토리에 있는지 알 수 없습니다. 하지만 제한적이기는 하지만 터미널이 작업 디렉토리를 알 수 있는 방법이 있습니다.


몇몇 서버는 터미널 에뮬레이터에게 터미널 코드로 터미널 타이틀을 바꾸도록 할 수 있습니다. 이 정보에 현재 디렉토리에 대한 정보가 들어 있다면 터미널 에뮬레이터는 현재 작업 디렉토리를 분리해 낼 수 있습니다.

Xshell이 알아낸 이 작업 디렉토리 정보가 Xshell이 Xftp를 호출할 때, 세션이 복제될 때, 파일 매니저가 해당 디렉토리의 파일이나 디렉토리를 나열할 때 사용됩니다.

다음은 많이 사용되고 있는 BASH 셸에서 터미널 타이틀이 변경될 수 있도록 하는 설정 사항입니다. 다른 셸을 사용하고 있다면 다음 글을 참고하시기 바랍니다. https://tldp.org/HOWTO/Xterm-Title-4.html


  1. BASH나 BASH와 유사한 셸을 사용합니다.
     

  2. TERM 종류가 xterm이나 이와 유사한 것이 되도록 합니다. xterm-color 터미널 타입도 좋습니다. 다만 최신의 유닉스/리눅스들에서는 이것이 필수적이지 않은 것 같습니다.

    $ export TERM=xterm
  3. PROMPT_COMMAND 환경 변수가 다음과 같이 설정되어 있어야 합니다.

    $ export PROMPT_COMMAND='printf "\033]0;%s@%s:%s\007" "${USER}" "${HOSTNAME%%.*}" "${PWD/#$HOME/~}"'

    또는

    $ export PROMPT_COMMAND='echo -ne "\033]0;${USER}@${HOSTNAME}: ${PWD}\007"'


    현재 작업 경로 정보인  $PWD가 PROMPT_COMMAND에 포함되어 있는 것을 알 수 있습니다. 이를 응용하여 자신만의 타이틀바 메시지를 만들 수 있습니다.
    ※ 주의: 타이틀바 문자열을 설정할 때 현재 경로 부분은 문자열의 맨 끝에 와야 합니다. Xshell이 경로라고 판단하는 부분은 해당 문자열 중에서 '~' 또는 '/'가 맨 처음으로 나오는 곳부터 마지막까지입니다.

  4.  디렉토리를 이동할 때 탭이나 창의 타이틀 바에서 작업 경로가 변경되는 것을 확인합니다.


    /usr/bin 디렉토리로 변경 후: