[LINUX] Vereinfachen Sie den an der Eingabeaufforderung angezeigten Pfad

/ home / username / foo / bar ist lang

Ich möchte es an der Eingabeaufforderung mit "~ / f / bar" wie Fisch anzeigen

Fischquelle anzeigen

Quelle von prompt_pwd

 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".

Anzeige auf PROMPT

PS1='[\u@\h] $(abbr_pwd $PWD) \$ '

Bitte spielen Sie entsprechend damit.

Recommended Posts

Vereinfachen Sie den an der Eingabeaufforderung angezeigten Pfad
Maya | Ruft den Arbeitsbereichspfad ab