Oferecer automaticamente a permissão de execução em scripts de shell

Oferecer automaticamente a permissão de execução em scripts de shell

Eu uso muito scripts de shell. Praticamente todas as vezes, eu crio o script e tento executá-lo, mas recebo o erro de permissão porque esqueci de configurar o +x. Isso parece um grande incômodo, existe uma maneira de fazer meu shell ( zsh) perguntar automaticamente se eu gostaria de adicionar a permissão de execução e tentar novamente, em vez de apenas me dar o erro?

Eu sei que posso source my.sh, mas sourcing não é o mesmo que trabalhar com ./my.she eu gostaria do último.

Responder1

Em vez de criar scripts, considere criarfunções(e convertendo scripts existentes em funções). Dessa forma, você nunca mais terá que se preocupar com permissões.

Os scripts são facilmente convertidos em funções:

  1. Remova a .shextensão do nome do arquivo. (Tecnicamente opcional, masessa é a convenção.)
  2. Certifique-se de que o diretório pai do arquivo esteja em seu arquivo $fpath.
  3. autoloadsua função no seu .zshrc.

Se você precisar de funções diferentes para projetos diferentes, considere usarhttps://github.com/direnv/direnv. Dessa forma, cada projeto pode ter funções próprias $fpathe ed.autoload

Responder2

Isso pode ajudar:

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

informação relacionada