自动提供设置 shell 脚本的执行权限

自动提供设置 shell 脚本的执行权限

我经常使用 shell 脚本。实际上每次,我都会创建脚本并尝试运行它,但会收到权限错误,因为我忘记设置+x.这看起来是一个巨大的麻烦,有没有办法让我的 shell ( zsh) 自动询问我是否要添加执行权限并重试,而不是仅仅给我错误?

我知道我可以source my.sh,但是采购与运行不同./my.sh,我想要后者。

答案1

不要创建脚本,而是考虑创建功能(并将现有脚本转换为函数)。这样,您就再也不用担心权限问题了。

脚本很容易转换为函数:

  1. .sh从文件名中删除扩展名。 (技术上是可选的,但是这就是惯例.)
  2. 确保文件的父目录位于您的$fpath.
  3. autoload你的函数在你的.zshrc.

如果不同的项目需要不同的功能,可以考虑使用https://github.com/direnv/direnv。这样,每个项目都可以有自己的$fpath功能autoload

答案2

这可能有帮助:

function command_permission() {
  # Get the command being run
  local cmd="${1}"
  local cmd=$(echo "${cmd}" | awk '{print $1}' )

  # Check if it starts with "./" and if the file doesn't have execute permission
  if [[ "${cmd}" =~ ^\./ && ! -x "${cmd#./}" ]]; then
    # Prompt for permission to chmod +x the file
    read -rq "REPLY?${cmd#./} is not executable. Do you want to make it executable (y/n)? "
    "$cmd" "$@"

    if [[ "${REPLY}" =~ ^[Yy]$ ]]; then
      # Make the file executable
      chmod +x "${cmd#./}"
    fi

    # Add a newline after the prompt
    echo ""
  fi
}

# Set the preexec function to be called before running each command
autoload -Uz add-zsh-hook
add-zsh-hook preexec command_permission

相关内容