0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

ターミナルのカレントディレクトリ表示を任意の相対パスにする方法

Last updated at Posted at 2025-06-01

概要

ターミナルのプロンプト表示でカレントディレクトリ表示

user@host:~/Projects/foo/bar/workspace/src$ 

任意のディレクトリからの相対パス を使って

user@host:workspace/src$ 

みたいに短くしたい。

背景

ターミナルのプロンプトに表示されるカレントディレクトリが長くなって見辛くなることってあるあるだと思います。Bashであれば PS1 という環境変数の中の \w\W に変更することで、絶対パスではなくカレントディレクトリ名だけにすることができます。しかし、ディレクトリ名だけになってしまうとそれはそれでどこだかわかりにくって問題もあります。

そこで、ワークスペースのルートディレクトリからの相対パスを表示するようにできたらちょうど良さそうと考え、本記事ではその実現方法を記します。

手順

1. 環境変数 PS1 を変更する

~/.bashrc に以下を記述します。 WORKSPACE_FOLDER は好きな名前に変更可能です。

~/.bashrc
function rpath() {
    if [[ -n "$WORKSPACE_FOLDER" && "$PWD/" == "$WORKSPACE_FOLDER/"* ]]; then
        local workspaceBase=${WORKSPACE_FOLDER%/*}
        echo -n "${PWD#$workspaceBase/}"
    else
        # ワークスペース外の場合は絶対パス(ホームディレクトリは~に置き換え)
        echo -n "${PWD/$HOME/\~}"
    fi
}
PS1='`rpath`\$ '  # プロンプト文字列は個人の好みで調整する

PS1 の中身はシングルクォートで囲った文字列にしてください。これは環境変数 PS1 が評価される度に rpath が再評価される必要があるからです。もしダブルクォートだと ~/.bashrc が読み込まれるタイミングの1回だけしか評価されず、ディレクトリを移動してもプロンプト表示が最初から変わってくれません。ダブルクォートにする場合は PS1="\rpath`$ " のようにエスケープしましょう。

2. .bashrc を再読み込みする

以下のコマンドで ~/.bashrc を再読み込みします。

source ~/.bashrc

3. 環境変数 WORKSPACE_FOLDER を設定する

以下のコマンドで現在のディレクトリをワークスペースのルートディレクトリとして環境変数 WORKSPACE_FOLDER を設定します。

export WORKSPACE_FOLDER=$(pwd)

Visual Studio Codeのターミナルであれば、ユーザーの settings.json かワークスペースの .vscode/settings.json に以下を設定することで自動でワークスペースのルートディレクトリが環境変数 WORKSPACE_FOLDER に設定できます。 1

settings.json
{
    "terminal.integrated.env.linux": {
        "WORKSPACE_FOLDER": "${workspaceFolder}"
    },
}

試すとこんな感じ

手順1を済ませた前提。

~$ source ~/.bashrc
~$ pwd
/home/vscode
~$ mkdir -p foo/bar/workspace/src
~$ cd foo/bar/workspace/
~/foo/bar/workspace$ export WORKSPACE_FOLDER=$(pwd)
workspace$ cd src/
workspace/src$ 
workspace/src$ cd ../../
~/foo/bar$ 

WORKSPACE_FOLDER より親の階層に行ったら \w と同じように絶対パスになります。

おまけ

WORKSPACE_FOLDER より親の階層に行っても workspace/.. のように相対パスを貫きたい場合は rpath 関数を以下のように書き換えてみてください。

~/.bashrc
function rpath() {
    local relativePath=$(realpath --relative-to "$WORKSPACE_FOLDER" "$PWD" 2>/dev/null)
    if [[ -z "$WORKSPACE_FOLDER" || -z "$relativePath" ]]; then
        # WORKSPACE_FOLDERが未設定または不正な場合は絶対パス(ホームディレクトリは~に置き換え)
        echo -n "${PWD/$HOME/\~}"
        return
    fi

    local workspaceFolderName=${WORKSPACE_FOLDER##*/}
    if [[ "$relativePath" == "." ]]; then
        echo -n "$workspaceFolderName"
    else
        echo -n "$workspaceFolderName/$relativePath"
    fi
}

~/.bashrc を編集して再読み込みすると

workspace$ source ~/.bashrc
workspace$ cd src/
workspace/src$ cd ../..
workspace/..$ mkdir -p workspace2/lib
workspace/..$ cd workspace2/lib
workspace/../workspace2/lib$ 

こんな感じでワークスペースの親、兄弟ディレクトリに行っても相対パスで表示できます。

  1. Visual Studio Code Variables Reference

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?