zsh/bash: 論理ディレクトリ構造規則を使用して、実行前にコマンド・パラメーターの相対パスを拡張します。

zsh/bash: 論理ディレクトリ構造規則を使用して、実行前にコマンド・パラメーターの相対パスを拡張します。

だから私はシェルに「論理的」モードと「物理的」モードがあることpwdを知っています(参照:cdこの問題そしてそこからリンクされた質問)。

それでは、次のシンボリックリンクがあるとしましょう。

/home/<username>/foo -> /tmp/bar

ローカルで行うには、次のようにします。

mkdir /tmp/bar
ln -s /tmp/bar ~/foo

$HOMEこれでmyとcdintoを起動すると、foo「論理」パス(デフォルト設定を使用)を取得し、次のようにpwd「物理」パスを取得できます-P

$ cd ~/foo
$ pwd
/home/<username>/foo
$ pwd -P
/tmp/bar

もちろん、 " .."は常に "物理的"パスの親パスを表します(私が理解したところ、このパスはシェルによって解釈されずにそのままコマンドに渡され、いくつかの特別な組み込みコマンド(具体的にはcd解釈) ))「論理的」動作を取得するには):

$ pwd
/home/<username>/foo
$ realpath ..
/tmp

私が望むのは、$HOME/foo私が使用する相対パス(たとえば)が(またはそのサブディレクトリにあるとき)、ls -l ../..「論理」パスに基づいて解釈/拡張されることです(コマンドの前にOKを付ける必要がある場合)。

たとえば、

$ pwd
/home/<username>/foo
$ vi ../something.txt

私はこの問題を解決したいですvi /home/<username>/something.txt

次のこと(またはすべての引数を繰り返すためにコマンドの前に追加できるシェル関数を作成し、パスを参照する場合はコマンドに渡す前に拡張すること)よりも簡単で短いことはありますか?

$ pwd
/home/<username>/foo
$ realpath -L $PWD/../something.txt
/home/<username>/something.txt
$ vi $(realpath -L $PWD/../something.txt)

「シェルがコマンドを実行する前に、コマンドライン引数の論理パス拡張は相対ファイルパスで実行されます」のようなものはありますか?を使用していますが、orのためのzshどのbashソリューションでもzsh大丈夫でしょう。

ベストアンサー1

私はZshを使ってこの質問に答えます。なぜならそれが私が使っているものだからです。


..使用時に望ましい効果を得るには、ファイルcdに以下を追加します~/.zshrc

setopt NO_chase_dots NO_chase_links

ドキュメントはここにあります:http://zsh.sourceforge.net/Doc/Release/Options.html#index-CHASEDOTS


..:hそれ以外の場合は、(「head」)拡張修飾子を代わりに使用する必要があります。

$ pwd
/home/<username>/foo
$ vi $PWD:h/something.txt

複数のレベルに移動する必要がある場合は、そのレベルに数字を追加するか(式を中括弧で囲んだ場合)、次の手順を繰り返すことができます:h

# These two are equivalent:
$ vi ${PWD:h2}/foo
$ vi $PWD:h:h/foo

ドキュメントはここにあります:http://zsh.sourceforge.net/Doc/Release/Expansion.html#Modifiers

おすすめ記事