Git bash 无法识别 'rev' 命令
Git bash doesn't recognize 'rev' command
我正在尝试使用缩短 bash 提示的功能。我已经在 .bash_profile
:
中添加了它
function last_two_dirs {
pwd |rev| awk -F / '{print ,}' | rev | sed s_\ _/_
}
export PS1='$(last_two_dirs) $(__git_ps1) ➡ '
但我每次启动时都会收到错误 bash: rev: command not found
git bash。
我已经正确设置了 PATH
,因为除了 rev
之外的其他命令都可以正常工作。 rev
不是 git bash 的一部分吗?或者有没有其他方法可以只显示 bash 提示符的父目录和当前目录?
OS: Windows 10
您的环境似乎没有 rev
命令。然而,你不需要它,有内置的设施可以满足你的需要。
要获取 PS1
中的当前工作目录,请使用 \w
:
PS1='\w$ '
这将为您提供完整路径,因此您的提示将类似于
~/tinker/so/subdir/subsubdir$
现在,将 $PROMPT_DIRTRIM
变量设置为要保留的尾随目录数:
PROMPT_DIRTRIM=2
这会给你一个提示,比如
~/.../subdir/subsubdir$
bash 函数围绕 $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
}
另一个特例
Les想象你的道路是这样的:
/srv/dist/invoices-2019/data-2019-02-10/seq-123
到 trim 路径的所有部分,直到第一个破折号:
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 %s "${PWD#${left%/*}/}"
或更好:
printf -v ${1:-myResult} '%s' "${PWD#${left%/*}/}"
样本:
last_two_dirs() { local left=${PWD%/*};printf -v "%s" "${PWD#${left%/*}/}" ;}
last_two_dirs result
printf -v %s "$result"
或
path_parts() {
local APATH
IFS=/ read -a APATH <<<"$PWD"
if ((${#APATH[@]}>3)) ;then
printf -v %s "/${APATH[1]}..${APATH[-1]}"
else
printf -v %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
这是对我有用的代码 -
PROMPT_COMMAND='case $PWD in
$HOME) HPWD="~";;
$HOME/*/*) HPWD="${PWD#"${PWD%/*/*}/"}";;
$HOME/*) HPWD="~/${PWD##*/}";;
/*/*/*) HPWD="${PWD#"${PWD%/*/*}/"}";;
*) HPWD="$PWD";;
esac'
PS1='$HPWD $'
引用自link
function last_two_dirs ()
{
awk -F/ '{print ((NF>1)?$(NF-1)"/":"")""$NF}' <<< $PWD
}
您可以简单地使用
pwd | sed -r 's|.*/([^/]+/[^/]+)$||'
改为
安装MSYS2工具,它有你需要的工具。
我正在尝试使用缩短 bash 提示的功能。我已经在 .bash_profile
:
function last_two_dirs {
pwd |rev| awk -F / '{print ,}' | rev | sed s_\ _/_
}
export PS1='$(last_two_dirs) $(__git_ps1) ➡ '
但我每次启动时都会收到错误 bash: rev: command not found
git bash。
我已经正确设置了 PATH
,因为除了 rev
之外的其他命令都可以正常工作。 rev
不是 git bash 的一部分吗?或者有没有其他方法可以只显示 bash 提示符的父目录和当前目录?
OS: Windows 10
您的环境似乎没有 rev
命令。然而,你不需要它,有内置的设施可以满足你的需要。
要获取 PS1
中的当前工作目录,请使用 \w
:
PS1='\w$ '
这将为您提供完整路径,因此您的提示将类似于
~/tinker/so/subdir/subsubdir$
现在,将 $PROMPT_DIRTRIM
变量设置为要保留的尾随目录数:
PROMPT_DIRTRIM=2
这会给你一个提示,比如
~/.../subdir/subsubdir$
bash 函数围绕 $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
}
另一个特例
Les想象你的道路是这样的:
/srv/dist/invoices-2019/data-2019-02-10/seq-123
到 trim 路径的所有部分,直到第一个破折号:
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 %s "${PWD#${left%/*}/}"
或更好:
printf -v ${1:-myResult} '%s' "${PWD#${left%/*}/}"
样本:
last_two_dirs() { local left=${PWD%/*};printf -v "%s" "${PWD#${left%/*}/}" ;}
last_two_dirs result
printf -v %s "$result"
或
path_parts() {
local APATH
IFS=/ read -a APATH <<<"$PWD"
if ((${#APATH[@]}>3)) ;then
printf -v %s "/${APATH[1]}..${APATH[-1]}"
else
printf -v %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
这是对我有用的代码 -
PROMPT_COMMAND='case $PWD in
$HOME) HPWD="~";;
$HOME/*/*) HPWD="${PWD#"${PWD%/*/*}/"}";;
$HOME/*) HPWD="~/${PWD##*/}";;
/*/*/*) HPWD="${PWD#"${PWD%/*/*}/"}";;
*) HPWD="$PWD";;
esac'
PS1='$HPWD $'
引用自link
function last_two_dirs ()
{
awk -F/ '{print ((NF>1)?$(NF-1)"/":"")""$NF}' <<< $PWD
}
您可以简单地使用
pwd | sed -r 's|.*/([^/]+/[^/]+)$||'
改为
安装MSYS2工具,它有你需要的工具。