我有一个基本上如下所示的脚本:
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 中运行的单个脚本?