在 python 中,我们可以使用自动应用和针对函数执行的代码来装饰函数。
bash 中是否有类似的功能?
在我目前正在处理的脚本中,我有一些样板文件来测试所需的参数并在它们不存在时退出 - 如果指定了调试标志,则显示一些消息。
不幸的是,我必须将这段代码重新插入到每个函数中,如果我想更改它,我将不得不修改每个函数。
有没有办法从每个函数中删除此代码并将其应用于所有函数,类似于 python 中的装饰器?
我正在编写一个 bash 脚本,随着我的学习,我了解了陷阱、信号、函数返回代码和其他我以前没有使用过的功能。
我可能正在错误地思考事情 - 我正在寻找一些建议。
我正在设置以下选项:
set -o errexit
set -o nounset
set -o noclobber
Run Code Online (Sandbox Code Playgroud)
我的 bash 脚本中有以下退出和错误陷阱:
# Error handler. This function is called anytime an ERR signal is received.
# This function should never be explictly called.
function _trap_error () {
if [ ! -v _VERBOSE ]; then
echo "An error has occurred. Exiting."
else
_name="$0" # name of the script
_lastline="$1" # argument 1: last line of error occurence
_lasterr="$2" # argument 2: error code of …
Run Code Online (Sandbox Code Playgroud) 我一直在研究我的 zsh 配置,并且对 zsh 扩展语法的几个点感到困惑。其中很多内容都是基于我在以下资源中找到的内容:
我当前的 zsh 配置如下所示:
~/.config/zsh/rcsentry
~/.zshenv symlink -> ~/.config/zsh/rcsentry
~/.config/zsh/.zshenv symlink -> ~/.config/zsh/rcsentry
~/.config/zsh/.zshrc symlink -> ~/.config/zsh/rcsentry
~/.config/zsh/.zlogin symlink -> ~/.config/zsh/rcsentry
~/.config/zsh/.zprofile symlink -> ~/.config/zsh/rcsentry
Run Code Online (Sandbox Code Playgroud)
我的 rcsentry 目前已被精简到最小状态,同时我试图准确理解它是如何工作的。目前它包含:
if [[ -o rcs ]]; then
rcs_fn="${(%):-%1N}"
rcs_fp="${(%):-%N}"
echo "rcs_fn: $rcs_fn"
echo "rcs_fp: $rcs_fp"
if [[ "$rcs_fn" == ".zshenv" ]]; then
echo "initializing XDG environment variables ..."
export XDG_CACHE_HOME="${XDG_CACHE_HOME:=$HOME/.cache}"
export XDG_CONFIG_HOME="${XDG_CONFIG:=$HOME/.config}"
export XDG_DATA_HOME="${XDG_DATA_HOME:=$HOME/.local/share}"
echo "initializing ZSH environment variables ..."
export ZDOTDIR="${ZDOTDIR:=$XDG_CONFIG_HOME/zsh}"
fi …
Run Code Online (Sandbox Code Playgroud) 我的 .bashrc 文件是模块化的,我在其中进行了一些错误检查。在 bash 脚本中,我通常有一个函数 _errexit(或类似的东西),当我检测到错误并想要退出时调用它。
就我的 bashrc 文件而言,我不想退出(它会关闭外壳) - 但我确实想显示一条错误消息并立即停止处理。
任何想法这可能是什么?