答案1
单程
如果您需要真正的提示,您可以使用一些光标操作,如下所示:
#!/bin/bash
# Save cursor position
printf '\033[s'
# Move the cursor up 1 line
printf '\033[1A'
# Clear the screen
printf '\033[1J'
# Restore cursor position
printf '\033[u'
echo "new thing"
如果上述示例需要进一步调整,请参见示例ANSI 转义序列:光标移动并且ANSI 转义序列了解更多。
其他方式
如果您愿意,您仍然可以使用clear
,然后像这样重新绘制提示:
#!/bin/bash
# Clear the screen
clear
# Build the prompt as it was before "clear"
line="$(printf '%s' "$USER@$HOSTNAME:$PWD$ $0")"
# For "root" prompt i.e. "#", comment out the above line and uncomment the below line
# line="$(printf '%s' "$USER@$HOSTNAME:$PWD# $0")"
# Print the prompt
echo "${line/\/home\/$USER/\~}"
echo "new thing"
或者像这样:
#!/bin/bash
clear
line="$USER@$HOSTNAME:$PWD$ "
read -t 0.01 -ei "$(echo "$0")" -p "${line/\/home\/$USER/\~}"
echo
echo "new thing"
外表是具有欺骗性的,但是外表也许就是你想要的...尽管这并不是真正的提示。
答案2
您的问题不太严重clear
(讽刺的是,这正是您想要使用的命令),但无论如何我都会尝试回答。
据我了解,您使用命令调用脚本(假设它被称为./myscript
),并希望在运行脚本之前清除屏幕。
您可以通过两种方式来实现这一点。
清除屏幕然后运行脚本:
$ clear; ./myscript
将
clear
命令作为脚本的第一行:#!/bin/bash # Beginning of ./myscript clear # The rest of the script goes here
然后只需运行脚本,它将清除屏幕,然后继续做其他事情:
$ ./myscript
最后,如果您想创建一个清除屏幕的别名,然后重新运行最后一个命令,您可以定义:
alias clrun='clear; $(fc -ln -1)'
然后运行clrun
将会执行以下操作:清除屏幕,然后重新运行上一个命令。
如果这不能回答您的问题,您必须更加精确地说明您想要什么。