use*_*535 5 command-line bash scripts
我很难集中注意力解决这个小问题
\n基本上我使用这个 bash PS1 脚本,因为它有点酷:
\nPS1="\\n \\[\\033[0;34m\\]\xe2\x95\xad\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\\[\\033[0;31m\\]\xee\x82\xb2\\[\\033[0;37m\\]\\[\\033[41m\\] \\u \\[\\033[0m\\]\\[\\033[0;31m\\]\xee\x82\xb0\\[\\033[0;34m\\]\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\\[\\033[0;32m\\]\xee\x82\xb2\\[\\033[0;30m\\]\\[\\033[42m\\] \\w \\[\\033[0m\\]\\[\\033[0;32m\\]\xee\x82\xb0 \\n \\[\\033[0;34m\\]\xe2\x95\xb0\xef\x91\xa0 \\[\\033[1;36m\\]\\$ \\[\\033[0m\\]"\nRun Code Online (Sandbox Code Playgroud)\n看起来像这样:
\n\n我想要做的是在右侧打印时间戳,并用实线连接文本左侧的末尾和右侧的开头,例如:
\nPS1="\\n \\[\\033[0;34m\\]\xe2\x95\xad\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\\[\\033[0;31m\\]\xee\x82\xb2\\[\\033[0;37m\\]\\[\\033[41m\\] \\u \\[\\033[0m\\]\\[\\033[0;31m\\]\xee\x82\xb0\\[\\033[0;34m\\]\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\\[\\033[0;32m\\]\xee\x82\xb2\\[\\033[0;30m\\]\\[\\033[42m\\] \\w \\[\\033[0m\\]\\[\\033[0;32m\\]\xee\x82\xb0 \\n \\[\\033[0;34m\\]\xe2\x95\xb0\xef\x91\xa0 \\[\\033[1;36m\\]\\$ \\[\\033[0m\\]"\nRun Code Online (Sandbox Code Playgroud)\n我尝试这样做:
\n$(printf \'%*s\' $COLUMNS \'-\')\nRun Code Online (Sandbox Code Playgroud)\n但这显然只是创建了一条充满破折号的全新行。
\n我知道如何获取光标停止处的值,tput sc但我不明白如何在变量中使用它?然后打印这些行,在右侧留下大约 5 个字符作为时间。
这是我第一次尝试 bash 脚本,所以请原谅我的无知。
\n任何帮助表示赞赏
\n小智 7
首先,您必须从提示字符串中去除转义序列并将其扩展以获得实际长度以减去列长度。
\nprompt_handler(){\n local A="$2[\\A]"\n\n while [[ $A =~ \\\\[\\x1b\\\\[[0-9\\;]*m\\\\] ]]; do\n A=${A//"${BASH_REMATCH}"}\n done\n\n A=${A@P} \\\n A=$((COLUMNS-${#A}))\n\n eval printf \\\n -v A \xe2\x94\x80%.s {1..$A}\n\n PS1="$1$2${A}[\\A]$3"\n}\n\nPROMPT_COMMAND='prompt_handler "\\n" " \\[\\033[0;34m\\]\xe2\x95\xad\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\\[\\033[0;31m\\]\xee\x82\xb2\\[\\033[0;37m\\]\\[\\033[41m\\] \\u \\[\\033[0m\\]\\[\\033[0;31m\\]\xee\x82\xb0\\[\\033[0;34m\\]\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\\[\\033[0;32m\\]\xee\x82\xb2\\[\\033[0;30m\\]\\[\\033[42m\\] \\w \\[\\033[0m\\]\\[\\033[0;32m\\]\xee\x82\xb0" "\\n \\[\\033[0;34m\\]\xe2\x95\xb0\xef\x91\xa0 \\[\\033[1;36m\\]\\$ \\[\\033[0m\\]"'\nRun Code Online (Sandbox Code Playgroud)\n