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

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 디렉토리로 변경 후: