Ofrecer automáticamente establecer permisos de ejecución en scripts de shell

Ofrecer automáticamente establecer permisos de ejecución en scripts de shell

Utilizo mucho los scripts de shell. Prácticamente cada vez, creo el script e intento ejecutarlo, y obtengo el error de permiso porque olvidé configurarlo +x. Esto parece una gran molestia, ¿hay alguna manera de hacer que mi shell ( zsh) pregunte automáticamente si deseo agregar el permiso de ejecución e intente nuevamente, en lugar de simplemente darme el error?

Sé que puedo simplemente source my.sh, pero el abastecimiento no es lo mismo que ejecutar ./my.shy me gustaría lo último.

Respuesta1

En lugar de crear guiones, considere crearfunciones(y convertir scripts existentes en funciones). De esa manera, nunca más tendrás que preocuparte por los permisos.

Los scripts se convierten fácilmente en funciones:

  1. Elimine la .shextensión del nombre del archivo. (Técnicamente opcional, peroesa es la convención.)
  2. Asegúrese de que el directorio principal del archivo esté en su archivo $fpath.
  3. autoloadsu función en su .zshrc.

Si necesita diferentes funciones para diferentes proyectos, considere usarhttps://github.com/direnv/direnv. De esa manera, cada proyecto puede tener sus propias funciones $fpathy ediciones.autoload

Respuesta2

Esto podría ayudar:

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

información relacionada