쉘 스크립트 설정을 위한 실행 권한을 자동으로 제공

쉘 스크립트 설정을 위한 실행 권한을 자동으로 제공

저는 쉘 스크립트를 많이 사용합니다. 말 그대로 매번 스크립트를 생성하고 실행하려고 시도하지만 설정하는 것을 잊어버렸기 때문에 권한 오류가 발생합니다 +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

관련 정보