Je veux l'afficher à l'invite avec ~ / f / bar
comme un poisson
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
.
PS1='[\u@\h] $(abbr_pwd $PWD) \$ '
Veuillez jouer avec le cas échéant.