使っていますチップピュアzshでメッセージが表示されました。print -Pn ...
現在のディレクトリを印刷するために内部的に使用されます。何らかの理由で現在のディレクトリの先頭に一致する環境変数を設定すると、その環境変数名が出力に置き換えられます。
例えば、
> export SOME_DIR=/home/bschlenk/some/path
> cd ~/some/path/deeper/nested/path
> print -Pn %~
~SOME_DIR/deeper/nested/path
任意の環境変数を一致するパスに置き換えることを防ぐ方法は何ですか?現在のパスを印刷して/home/bschlenk
に置き換えたいのですが、~
他に何もありません。
ベストアンサー1
~から出荷書類ビーチ%~
:
プレフィックスという名前のディレクトリがある場合、その部分は
~
ディレクトリ名に置き換えられますが、結果がフルパスより短い場合にのみ適用されます。
注意事項は次のとおりです。動的そして変化のないディレクトリ名を指定します。あなたが見るのは静的に名前が付けられたディレクトリです
次のテキストが、
~
値がで始まる文字列シェルパラメータの名前である場合でも定義できます/
。
したがって、変数の値がある場合、値はSOME_DIR
。静的に名前が付けられたディレクトリです。プロンプト拡張はこれを表示して短縮します。/home/bschlenk/some/path
~SOME_DIR
/home/bschlenk/some/path
%~
/home/bschlenk/some/path
~SOME_DIR
しかし、それはすべてではありません。実際、略語はSOME_DIR
「アクティブ化」を使用している場合にのみ表示されます~SOME_DIR
。この内容は次のように記録されます。オプションauto_name_dirs
、事前起動は必要ありませんが、デフォルトではオフになっています。
ディレクトリの絶対名に設定されたすべてのパラメータはすぐにそのディレクトリの名前になり、関連するプロンプトシーケンスで使用され、で始まる単語補完を
%~
実行するときに使用できます~
。 (そうでない場合は、~param
最初にそのパラメータをフォームに使用する必要があります。)
交換を有効にし%~
て完了するパラメータ~
は、次のように表示されます。名前付きディレクトリハッシュテーブルリストを使用できますhash -d
。
私たちは何が起こったのかを理解するために作品を一つにまとめました。問題をどのように解決しますか?SOME_DIR
活性化の原因によって異なります。
このオプションがオンの場合は、auto_name_dirs
当然オフにする必要があります。
以前に使用していた場合は、~SOME_DIR
以下を使用して無効にできます。
unhash -d SOME_DIR
これは永久的ではありません。再使用すると再びポップアップします~SOME_DIR
。しかし、$SOME_DIR
可能な限りどこでも利用できることを考えると、~SOME_DIR
それほど~SOME_DIR
有用な機能ではありません。
名前付きディレクトリコンポーネントを削除できず、→をSOME_DIR
使用して$HOME
現在のディレクトリを縮小したい場合は、~
この変換を手動で実装できます。
if [[ $PWD = $HOME ]]; then
HPWD=\~
elif [[ $PWD = $HOME/* ]]; then
HPWD=\~/${PWD#$HOME/}
else
HPWD=$PWD
fi
print -rn $HPWD
その後、代わりに使用してくださいprint -Pn %~
。
SOME_DIR
ディレクトリの命名を防ぐことができず、使用されているコードを変更できない場合、%~
状況はさらに難しくなります。明確なディレクトリhashtableを使用できますが、関数をローカルに作成することhash -r
はできません(サブシェルのみ)。