Ich möchte es an der Eingabeaufforderung mit "~ / f / bar" wie Fisch anzeigen
string replace -ar '(\.?[^/]{'"$fish_prompt_pwd_dir_length"'})[^/]*/' '$1/' $tmp
Es ist geworden.
Da "String Replace" eine Funktion von Fischen ist, wird es durch Bash reproduziert.
function abbr_pwd() {
local p=$(echo $PWD | sed "s@$HOME@~@")
local directories=(${p//\// })
local _n_d=${#directories[@]}
local _last=${directories[_n_d - 1]}
local _abbr_pwd=""
if [ ${directories[0]} != "~" ]; then
_abbr_pwd=$_abbr_pwd/
fi
#Eigentlich wenn[[ $p =~ (.?[^\/]{1})[^\/]*\/ ]]Ich möchte mit verarbeiten
for d in "${directories[@]:0:_n_d-1}"; do
_abbr_pwd=$_abbr_pwd${d:0:1}/
done
echo $_abbr_pwd$_last
}
Ich möchte mit einem regulären Ausdruck wie dem Code von fish verarbeiten, aber if [[$ p = ~ (.? [^ \ /] {1}) [^ \ /] * \ /]]; then; echo $ { BASH_REMATCH [@]}; fi
hat nur die erste Übereinstimmung ~
erhalten. (Wenn Sie es nachschlagen, können Sie es tun)
Ersetzen Sie den Verzeichnispfad / home / username / foo / bar
durch sed
, um ihn zu ~ / foo / bar
zu machen
Ich zerlegte die Zeichenkette mit "/", kombiniert mit "/", wobei nur das erste Zeichen außer dem letzten Teil übrig blieb, und fügte am Ende einen Balken hinzu, um "~ / f / bar" zu erhalten.
In dem Pfad, der von "$ HOME" verwurzelt ist, wird "/" am Anfang wie "/ usr / share / theme" -> "/ u / s / theme" gesetzt.
Befindet es sich jedoch in einem anderen Ausgangsverzeichnis als Ihrem eigenen Benutzer (kann nicht durch $ HOME ersetzt werden), wird es redundant wie "/ h / o (otherUser) / f / bar".
PS1='[\u@\h] $(abbr_pwd $PWD) \$ '
Bitte spielen Sie entsprechend damit.