用zsh中第二个命令的输出替换第一个命令的输出?

时间:2016-12-03 19:09:04

标签: bash zsh

此函数输出一个字符串'hello',并在5秒后将其替换为终端中同一行上的另一个字符串'good-bye':

echo -ne 'hello\r'; sleep 5; echo 'good-bye'

我有一种情况,我希望通过多个ls命令的输出实现相同的效果。第二个output命令的ls应该替换第一个ls的整个输出。

例如:(我一步一步的执行)

  1. 该脚本打印第一个someDir命令的输出:
  2. someFile1 someFile2 ls

    1. 等待按键。 (或者像第一个例子中那样:睡5秒钟)

    2. 删除第一个ls命令的整个输出(返回第一个位置)。

    3. 然后打印下一个-l命令的输出(在本例中为someDir选项):

      • someFile1
      • someFile2
      • echo -en "$(ls)\r"; sleep 5; echo "$(ls -l)"
    4. 我认为这应该有效:

      {{1}}

      但它没有...这只会打印输出两次,而不会用第二个替换第一个输出。

      有没有人知道我需要做些什么来使这个工作(如果可能的话)?

      我为什么需要这个?

      这背后的想法是创建一个函数,它允许您以不同的方式显示目录的内容,方法是使用 k / <浏览具有不同选项集的ls命令数组kbd> j 前进和后退。这样您就不需要输入所有特定的ls命令来获得所需的输出。您只需浏览到您需要的选项集。

1 个答案:

答案 0 :(得分:0)

  

我的想法是用第二个ls命令的整个输出替换第一个ls命令的整个输出。   

#!/bin/zsh
output=(${(@f)"$(ls)"}) # read output lines into array
print -l $output
sleep 5
echoti cuu $#output     # move cursor up $#output lines
echoti ed               # clear to end of screen
ls -l