滚动shell脚本输出而不将其输入更少

时间:2013-05-14 18:03:09

标签: bash shell scroll scripting

我有一个bash script.sh。我可以像这样轻松滚动输出:

$ ./script.sh | less

但是如何让输出显示自动滚动,而不必通过less来管道输出?换句话说,如何将该功能直接放入脚本本身?我只想执行这样的脚本:

$ ./script.sh

我知道我可以编写一个不同的脚本来执行第一个脚本并自动管道输出但是我不想编写另一个脚本只是为了让第一个脚本执行我想要它做的事情。知道我的意思吗?

3 个答案:

答案 0 :(得分:5)

您可以像这样编写脚本:

#!/bin/bash
(

    Your script here

) | less
exit $PIPESTATUS 

如果输出是终端(这样你可以less没有分页),这将通过./script.sh > file管道输出脚本,并保留脚本的退出代码。

答案 1 :(得分:3)

通常可以在脚本中添加下一个

#!/bin/bash

(  # add this to the start

#your old script here
date
cat /etc/passwd
df
ls -l
#end of your script

) | less      #and add this to the end

或者你可以把整个脚本放到像

这样的bash函数中
#!/bin/bash

the_runner() {
#your old script here
date
cat /etc/passwd
df
ls -l
#end of your script
}
the_runner "$@" | less

答案 2 :(得分:0)

我没有修改脚本本身,而是决定为Bash添加一个特殊的绑定。

实际上,您可以写./script.sh代替( ./script.sh ) | more

以下是您需要添加到.bashrc

的内容
# Switch to vi mode (default is emacs mode).
set -o vi 
dont_scroll_down() {
    # Add the command to your history.
    history -s "$READLINE_LINE"
    # Redirect all output to less.
    bash -c "$READLINE_LINE" 2>&1 | less -eFXR
    # Remove the command from the prompt.
    READLINE_LINE=''
    # Optionally, you can call 'set -o vi' again here to enter
    # insert mode instead of normal mode after returning from 'less'.
    # set -o vi
}
bind -m vi -x '"J": "dont_scroll_down"'

因此,您将能够执行以下操作:

  1. 输入您要运行的命令。

    $ ./script.sh 
    
  2. Escape 退出插入模式并进入正常模式。

  3. 现在按 Shift-j 执行该行。

  4. 现在您应该能够从头开始滚动输出。