webdevqa.jp.net

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は同じようにそれらを理解します:

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

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

[email protected]:/bin$ cd
[email protected]:~$ cd -L foobar
[email protected]:~/foobar$ cd -L ..   # go up, to ~/
[email protected]:~$ cd -L foobar
[email protected]:~/foobar$ cd -P ..   # go up, but not to ~/
[email protected]:/$

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