[LINUX] Simplifiez le chemin affiché à l'invite

/ home / username / foo / bar est long

Je veux l'afficher à l'invite avec ~ / f / bar comme un poisson

Voir la source du poisson

Source de prompt_pwd

 string replace -ar '(\.?[^/]{'"$fish_prompt_pwd_dir_length"'})[^/]*/' '$1/' $tmp

Il est devenu.

Puisque string replace est une fonction de fish, il est reproduit par bash.

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
    #En fait si[[ $p =~ (.?[^\/]{1})[^\/]*\/ ]]Je veux traiter avec
    for d in "${directories[@]:0:_n_d-1}"; do
        _abbr_pwd=$_abbr_pwd${d:0:1}/
    done
    echo $_abbr_pwd$_last
}

Je veux traiter avec une expression régulière comme le code de poisson, mais ʻif [[$ p = ~ (.? [^ \ /] {1}) [^ \ /] * \ /]]; alors; echo $ { BASH_REMATCH [@]}; fin'a obtenu que la première correspondance~`. (Si vous cherchez, vous pouvez le faire)

Remplacez le chemin du répertoire / home / username / foo / bar par sed pour le rendre ~ / foo / bar J'ai décomposé la chaîne de caractères avec "/" , combiné avec" / "en ne laissant que le premier caractère sauf la dernière partie, et j'ai ajouté une barre à la fin pour obtenir ~ / f / bar`.

Dans le chemin enraciné de $ HOME, / ʻest placé au début comme / usr / share / theme-> / u / s / theme`.

Cependant, s'il se trouve dans un répertoire personnel autre que votre propre utilisateur (ne peut pas être remplacé par $ HOME), il devient redondant comme / h / o (otherUser) / f / bar.

Afficher sur PROMPT

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

Veuillez jouer avec le cas échéant.

Recommended Posts

Simplifiez le chemin affiché à l'invite
Maya | Obtenir le chemin de l'espace de travail