web-dev-qa-db-ja.com

"〜"でpwd結果を作成しますか?

pwdがくれます

/data/users/me/some/random/folder

入手する簡単な方法はありますか

~/some/random/folder

pwdから

30
Sibbs Gambling

Bashを使用している場合、dirsビルトインは望ましい動作をします:

dirs +0
~/some/random/folder

(注 +0-0ではない 。)

zshの場合:

dirs
~/some/random/folder

正確には、最初にディレクトリスタックをクリアする必要があります。そうしないと、dirsはすべての内容を出力します。

dirs -c; dirs

またはzshprint組み込み:

print -rD $PWD

または

print -P %~

(これはプロンプト拡張をオンにします。%~$PS1は、$HOME~に置き換えて現在のディレクトリに展開しますが、他の名前付きディレクトリも処理します他のユーザーのホームディレクトリ、または自分で定義した名前付きディレクトリなど)。

29
chaos

Bash変数の部分文字列置換機能を使用できます。

$ pwd
/home/vagrant/foo/bar
$ echo ${PWD/#$HOME/'~'}
~/foo/bar
20
Nykakin

sedの使用:

pwd | sed "s|^$HOME|~|"

アイデアは、sed正規表現の区切り文字として、ホームディレクトリパスに出現する可能性が低い任意の文字を使用することです。上記の例では、|を使用しています。

この手法の良い点は、実際にはシェルに依存しないことです。

pwd/bin/pwd | sed "s|$HOME|~|"にエイリアスして、pwdを使用している可能性がある他のスクリプトでこの動作を実行することもできます。

7
Bichoy
_tilde=\~${PWD#~}
_

それがあなたの望みだと思いますか?

ティルダの優れた点は、引用符を必要としないパターンとして展開されるときです。引用符なしで同じ方法で_$HOME_を使用すると、構成文字がパターン文字になる可能性があるため、予期しない結果が表示され、必ずしも期待どおりの結果が表示されるとは限りません。

しかし、ティルダ展開は、引用符で囲まれた展開の結果であるかのように常に発生するため、その結果は予測可能です。これは、何らかの理由で_ksh93_とcaseの両方の注目すべき例外を除いて、mkshパターンとパラメーターパターンの両方についてテストしたほぼすべてのシェルに当てはまるようです。その容量。

これに関するもう1つの優れた点は、_$HOME_を再定義して、すべてのディレクトリをまったく同じ方法で処理できることです。例えば:

_cd ~
HOME=/some/prefix/I/would/like/to/trim 
#or, perhaps more usefully, some scripted means of arriving at same
tilde=\~${OLDPWD#~}
HOME=$PWD
_

次に別の例を示します。

_set 1 2 3 4 5 \~
cd ~; cd -; HOME= IFS=/
for d do shift
      HOME=${*#~/}/$d
      set ~ "$d" $HOME
done; cd -; HOME=$PWD
printf %s\\n "$@"
5/4/3/2/1/2/3/4/5/~/1/2/3/4/5/~
~
5
4
3
2
1
2
3
4
5
~
1
2
3
4
5
~
_
3
mikeserv

不要な部分をsedに置き換えてみてください。

pwd | sed 's,^/data/users/me,~,'

またはさらに良い:

pwd | sed "s,^$HOME,~,"
0
user1403360