使用“clear”命令清除除当前行之外的整个控制台

使用“clear”命令清除除当前行之外的整个控制台

需要清除终端但用命令保存当前行。在脚本中!(脚本由命令调用。必须在调用脚本的命令之前清除整个终端。)从历史记录中恢复命令是不合适的

预期用法示例:

  1. 正在创建脚本“test.sh”
  2. 我们在其中写入一些修改过的“清除”命令:
    #!/usr/bin/env bash
    clear
    echo some text
    
  3. 申请

当前终端状态:

在此处输入图片描述

运行'test.sh'后的当前结果:

在此处输入图片描述

问题是什么? 命令所在行消失了 + vscode 没有显示带有脚本错误代码的左侧复选标记。

预期结果:

在此处输入图片描述

怎么做?

附言:

问题不仅出现在 vscode 中,在其他终端中该命令也会被完全删除

在此处输入图片描述

答案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),并希望在运行脚本之前清除屏幕。

您可以通过两种方式来实现这一点。

  1. 清除屏幕然后运行脚本:

    $ clear; ./myscript
    
  2. clear命令作为脚本的第一行:

     #!/bin/bash
     # Beginning of ./myscript
     clear
    
     # The rest of the script goes here
    

    然后只需运行脚本,它将清除屏幕,然后继续做其他事情:

     $ ./myscript
    

最后,如果您想创建一个清除屏幕的别名,然后重新运行最后一个命令,您可以定义:

alias clrun='clear; $(fc -ln -1)'

然后运行clrun将会执行以下操作:清除屏幕,然后重新运行上一个命令。

如果这不能回答您的问题,您必须更加精确地说明您想要什么。

相关内容