我正在尝试使用缩短我的bash提示的功能。我已将其添加到.bash_profile
中:
function last_two_dirs {
pwd |rev| awk -F / '{print $1,$2}' | rev | sed s_\ _/_
}
export PS1='$(last_two_dirs) $(__git_ps1) ➡ '
但是每次我启动git bash时都会出现错误bash: rev: command not found
。
我已经正确设置了PATH
,因为除rev
以外的其他命令都可以正常工作。 rev
是否不属于git bash?还是有其他方法仅显示bash提示的父目录和当前目录?
操作系统:Windows 10
答案 0 :(得分:5)
您的环境似乎没有rev
命令。但是,您不需要它,内置的功能可满足您的需求。
要在PS1
中获得当前的工作目录,请使用\w
:
PS1='\w\$ '
这将为您提供完整的路径,因此您的提示将类似于
~/tinker/so/subdir/subsubdir$
现在,将$PROMPT_DIRTRIM
变量设置为要保留的尾随目录数:
PROMPT_DIRTRIM=2
这将为您提供类似的提示
~/.../subdir/subsubdir$
答案 1 :(得分:2)
$PWD
在bash下,您可以使用许多技巧和功能来使此操作更快,更有效
last_two_dirs() {
local left=${PWD%/*};
echo "${PWD#${left%/*}/}"
}
path_parts() {
local APATH
IFS=/ read -a APATH <<<"$PWD"
if ((${#APATH[@]}>3)) ;then
echo "/${APATH[1]}..${APATH[-1]}"
else
echo "$PWD"
fi
}
让您想象这样的道路:
/srv/dist/invoices-2019/data-2019-02-10/seq-123
修剪路径的所有部分,直到第一个破折号:
path_dash_Trim () {
local APATH;
IFS=/ read -a APATH <<< "$PWD";
APATH="${APATH[*]#*-}";
echo "${APATH// /\/}"
}
将呈现
/srv/dist/2019/2019-02-10/123
为了降低性能问题,有一种消除分叉(var=$(commnand)
)的正确方法:在函数中设置变量:
只需替换
echo ${PWD#${left%/*}/}
作者
printf -v $1 %s "${PWD#${left%/*}/}"
或更好:
printf -v ${1:-myResult} '%s' "${PWD#${left%/*}/}"
示例:
last_two_dirs() { local left=${PWD%/*};printf -v $1 "%s" "${PWD#${left%/*}/}" ;}
last_two_dirs result
printf -v $1 %s "$result"
或
path_parts() {
local APATH
IFS=/ read -a APATH <<<"$PWD"
if ((${#APATH[@]}>3)) ;then
printf -v $1 %s "/${APATH[1]}..${APATH[-1]}"
else
printf -v $1 %s "$PWD"
fi
}
以此类推...
然后
export -f path_parts
PROMPT_COMMAND='path_parts PS1&&PS1+=" \\$ "'
甚至只是专用功能:
myPrompt() {
local APATH fmt='%s\[\e];%s\a\] $ '
IFS=/ read -a APATH <<<"$PWD"
if ((${#APATH[@]}>4)) ;then
printf -v PS1 "$fmt" "/${APATH[1]}..${APATH[-2]}/${APATH[-1]}"{,}
else
printf -v PS1 "$fmt" "$PWD"{,}
fi
}
PROMPT_COMMAND=myPrompt
答案 2 :(得分:1)
这是对我有用的代码-
PROMPT_COMMAND='case $PWD in
$HOME) HPWD="~";;
$HOME/*/*) HPWD="${PWD#"${PWD%/*/*}/"}";;
$HOME/*) HPWD="~/${PWD##*/}";;
/*/*/*) HPWD="${PWD#"${PWD%/*/*}/"}";;
*) HPWD="$PWD";;
esac'
PS1='$HPWD \$'
引自link
答案 3 :(得分:0)
function last_two_dirs ()
{
awk -F/ '{print ((NF>1)?$(NF-1)"/":"")""$NF}' <<< $PWD
}
答案 4 :(得分:0)
您可以简单地使用
pwd | sed -r 's|.*/([^/]+/[^/]+)$|\1|'
代替