在 运行 个 .sh 文件后返回到我之前的提示

after running a .sh file go back to the prompt i was before

example.sh:


x=0
while true
do
  x=$(expr $x + 1)
   clear    #to print no. @ same location
  printf "\n\n     $x"|figlet -f block
  sleep 1;

done

喜欢,htop/cmatrix/vim/nano/bashtop,等...
在 运行 之后,我必须返回到最后一个提示,
不喜欢,cat/find/等...



最接近的解决方案是,运行 tmux 会话中的脚本



我想要的是,我不想失去我之前 运行 的命令输出,

就像 nano/vim/cmatrix 它清除屏幕然后 运行 它,然后当我们退出它时,就像 ^c/q ,我们回到了我们离开提示的地方,与历史[最后 运行 个命令和输出]

是否有 命令 执行此操作?




┌──(kali㉿kali)-[~]
└─$ vi

┌──(kali㉿kali)-[~]
└─$ nano

┌──(kali㉿kali)-[~]
└─$ cat copy
file contents

┌──(kali㉿kali)-[~]
└─$

在这里,我打开了 nano,我打开了 vim,但是你看不到我的内部 vim 或 nano,但 cat 不是这种情况,它只是在同一个会话中打印它,vim/nano/htop 终端是干净的,在 sed/cat/ps 中不是这样
我想创建一个这样的脚本,[这不会影响终端会话(例如 运行 在另一个维度)],

我试着阅读 [bashtop][1] 源代码,它也有相同的行为,但我找不到 code/command 的代码

vimless 以及许多其他工具访问终端的备用屏幕,然后在完成后恢复原始屏幕。您可以使用 tput 从 shell 脚本访问备用屏幕:

#!/bin/sh

tput smcup  # begin using the alternate screen

# ...

tput rmcup  # stop using alternate screen (restore terminal to original state)

请注意,您不想在脚本结束时留在备用屏幕中,因此您可能更愿意这样做:

#!/bin/sh

trap 'tput rmcup' 0
tput smcup

在 bashtop 中,他们在以前的更新中使用了 tput,然后将其更改为,

#!/bin/sh

echo -en '3[?1049h'  #* Switch to alternate screen

# codes to run inside

echo -en '3[?1049l'  #* Switch to normal screen