如何使使用 PAGER 的脚本符合最流行的 shell?

如何使使用 PAGER 的脚本符合最流行的 shell?

我有一个基本上如下所示的脚本:

if [ -t 1 ]; then
  bold="$(tput bold)"
  unbold="$(tput sgr0)"
else
  bold=""
  unbold=""
fi
TEXT="
${bold}Hello World${unbold}
There's a bunch of text in here that I don't control, but I
can escape it, so I put slashes before double quotes (\") and
dollar signs (\$)
"
ACTUAL_PAGER="${PAGER:-"less -R"}"
echo "$TEXT" | $ACTUAL_PAGER

这在 bash 中工作得很好,但在 zsh 中我得到了zsh: command not found: less -R,我认为 zsh 无法处理ACTUAL_PAGER.另外,如果PAGER设置为more我会得到“Hello World”周围的控制字符。

有没有办法让它在 bash、zsh 等中表现良好?

答案1

只要明确地写出来:

if [ -z "$PAGER" ]; then 
  ACTUAL_PAGER="less -R"
else
  ACTUAL_PAGER="$PAGER"  
fi

但为什么要尝试为多种语言编写脚本呢?如果您想要一个可移植的脚本,请使用普通的 POSIX shell 编写,如果不需要,请指定您想要的 shebang,以便脚本使用正确的解释器运行。您不会尝试编写在 Python 和 Perl 中运行的单个脚本,为什么要尝试编写在 bash 和 zsh 中运行的单个脚本?

相关内容