web-dev-qa-db-ja.com

Linuxシンボリックリンク:ポイントされたディレクトリに移動する方法?

独自のディレクトリにプロジェクトがあります。

/ dir/to/project /

デスクトップ上のそのディレクトリへのシンボリックリンクがあります。

/ home/user/Desktop/project /

そのリンクをダブルクリックすると、開くディレクトリウィンドウは次のようになります。

/ home/user/Desktop/project /

本物の代わりに、/dir/to/project

同じことがコマンドライン(Bash)でも起こります。

シンボリックなディレクトリの代わりに、私が望むものを取得すること、つまり、ポイントされたディレクトリに移動することは可能ですか?

注:現在使用しているWindows環境はXfceですが、一般的な答えにも興味があります。

2
Pietro

bashでは、cdビルトインは-Pおよび-Lスイッチを使用します。 pwdは同じようにそれらを理解します:

user@Host:~$ ln -s /bin foobar
user@Host:~$ cd -L foobar      # follow link
user@Host:~/foobar$ pwd -L     # print $PWD
/home/user/foobar
user@Host:~/foobar$ pwd -P     # print physical directory
/bin
user@Host:~/foobar$ cd -       # return to previous directory
/home/user
user@Host:~$ cd -P foobar      # use physical directory structure
user@Host:/bin$ pwd -L         # print $PWD
/bin
user@Host:/bin$ pwd -P         # print physical directory
/bin

さらに、cd ..は注意が必要な場合があります:

user@Host:/bin$ cd
user@Host:~$ cd -L foobar
user@Host:~/foobar$ cd -L ..   # go up, to ~/
user@Host:~$ cd -L foobar
user@Host:~/foobar$ cd -P ..   # go up, but not to ~/
user@Host:/$

help cdおよびhelp pwdを参照してください。同様に動作する/bin/pwdのような実行可能ファイル(つまり、シェルが組み込まれていない)もある可能性があることに注意してください。私のKubuntuでの違いは、オプションなしのpwdビルトインは-Lを使用し、/bin/pwdはデフォルトで-Pを使用することです。

組み込みのcdのデフォルトの動作は、set -Pcdcd -Pとして機能します)とset +Pcdcd -L)。詳細については、help setを参照してください。

9

ターゲットへのリンクを解決するには、readlinkを使用します。

cd $(readlink thelink)

Bashプロファイルで関数を定義することができます:

function cdl { local dir=$(readlink -e $1); [[ -n "$dir" ]] && cd $dir; }
3
xenoid

GUIでそれを実現する方法はわかりませんが、コマンドラインで回避策があります。

あなたのシンボリックリンクは:

/home/user/Desktop/project/

次に、readlinkコマンドを使用して、解決されたシンボリックリンクまたは正規のファイル名を取得できます。次に、それにcdします。

cd `readlink /home/user/Desktop/project`

ここで、readlinkはリンク名を解決し、次に substitution を使用してcdに渡します。

すでにデスクトップフォルダにいる場合は、絶対パスを指定する必要はありません。projectだけで十分です。

cd `readlink project`

このフォルダーに頻繁にアクセスする場合は、bashで1行の関数を記述できます。

function cdproject
{
    cd `readlink home/user/Desktop/project`;
}
1
C0deDaedalus