デフォルトでは、次のスクリプトがあります。
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
bash、zshなどでうまく機能する方法はありますか?
答え1
明示的に書いてください。
if [ -z "$PAGER" ]; then
ACTUAL_PAGER="less -R"
else
ACTUAL_PAGER="$PAGER"
fi
しかし、なぜ複数の言語のスクリプトを書こうとしているのですか?移植可能なスクリプトが必要な場合は、通常のPOSIXシェルに作成し、そうでない場合は、スクリプトが正しいインタプリタで実行されるように、必要なshebangを指定します。 PythonとPerlで実行される単一のスクリプトを作成しようとしていませんが、なぜbashとzshで実行される単一のスクリプトを作成しようとしますか?