1

GNU Screen のタイトル付けの目的で、親の名前をプレフィックスとして付けた現在のディレクトリ名を取得したいと思います。たとえば、ディレクトリ内

/home/rhys/share/pkgconfig
/home/rhys
/home
/

出力の生成

share/pkgconfig
home/rhys
home
/

Bashでは、次のような推測から始めます

echo $(basename $(dirname $PWD))/$(basename $PWD)

より良い解決策にたどり着くことができます

echo $(basename "${PWD%/*}")/${PWD##*/}

生成されるプロセスが 2 つ少ないため、より適切に言えます。

誰も使用を避けるためのかわいいトリックを持っていbasenameますか? これは、すべてのシェルプロンプトを実行するためのものであるため、できるだけ軽量であるとよいでしょう。

4

3 に答える 3

0

bash と awk を使用すると、次のようになります。

awk -F'/' '{print $(NF-1)"/"$NF}' <<<"$PWD"

編集

/homeだけではなく印刷されるため、前のものはまったく正しくありませんhome。多分あなたはそれと一緒に暮らすことができます。そうでない場合、これは完全に機能します。

awk -F'/' '{if (NF==2 && $2) {$0=$2} else {$0=$(NF-1)"/"$NF}}1' <<<"$PWD"

それをテストする:

awk -F'/' '{if (NF==2 && $2) {$0=$2} else {$0=$(NF-1)"/"$NF}}1' <<EOF
/home/rhys/share/pkgconfig
/home/rhys
/home
/
EOF

出力:

share/pkgconfig
home/rhys
home
/
于 2014-03-27T17:25:48.953 に答える