쉘 스크립트에 대한 실행 권한 설정을 자동으로 제안

쉘 스크립트에 대한 실행 권한 설정을 자동으로 제안

저는 쉘 스크립트를 많이 사용합니다. 거의 매번 스크립트를 생성하고 실행하려고 하는데, 설정하는 것을 잊어버렸기 때문에 권한 오류가 발생합니다 +x. 이것은 매우 번거로운 일인 것 같습니다. 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

관련 정보