我有以下代码,它根据最后一个命令是否成功执行(显示在PS1
之前)显示一条消息:
function previous_command() {
exit_code=$?
if [ $exit_code -eq 0 ]; then
echo -e "\033[1;4;32mCommand successful\033[00m"
else
echo -e "\033[1;4;31mCommand failed with exit code $exit_code\033[00m"
fi
}
我想要做的是将下划线一直延伸到当前终端窗口的边缘,如下所示:
假设退出代码长度为一个字符,我可以通过添加空格将其硬编码为80个字符,但如果我调整窗口大小或获得10或更高的退出代码,则会失败。
如何将此功能动态继续到终端窗口的边缘?
答案 0 :(得分:4)
您可以将带有空格的字符串与printf "%-42s"
对齐为42个字符。您可以使用$COLUMNS
获取窗口宽度。把它们放在一起,我们得到:
printf "\033[1;4;31m%-${COLUMNS}s\033[00m" "Command failed with $RANDOM"
无论(这里是随机的)数字是多少位数,该行总是一直延伸到边缘。
答案 1 :(得分:1)
这可行,但可能不是最佳解决方案:
function previous_command() {
if [ $? -eq 0 ]; then
COLOR=2
RESPONSE="Command successful"
else
COLOR=1
RESPONSE="Command failed with exit code $?"
fi
COLS=`tput cols`
LENGTH=${#RESPONSE}
while [ $LENGTH -lt $COLS ]
do
RESPONSE+=" "
LENGTH=$[$LENGTH+1]
done
echo -e "$(tput setaf $COLOR ; tput smul)$RESPONSE\e[00m"
}
这将强调控制台当前的宽度,但如果调整大小则不会。