![쉘 스크립트에 대한 실행 권한 설정을 자동으로 제안](https://rvso.com/image/178478/%EC%89%98%20%EC%8A%A4%ED%81%AC%EB%A6%BD%ED%8A%B8%EC%97%90%20%EB%8C%80%ED%95%9C%20%EC%8B%A4%ED%96%89%20%EA%B6%8C%ED%95%9C%20%EC%84%A4%EC%A0%95%EC%9D%84%20%EC%9E%90%EB%8F%99%EC%9C%BC%EB%A1%9C%20%EC%A0%9C%EC%95%88.png)
저는 쉘 스크립트를 많이 사용합니다. 거의 매번 스크립트를 생성하고 실행하려고 하는데, 설정하는 것을 잊어버렸기 때문에 권한 오류가 발생합니다 +x
. 이것은 매우 번거로운 일인 것 같습니다. zsh
오류를 표시하는 대신 쉘( )이 실행 권한을 추가하고 다시 시도할지 자동으로 묻도록 하는 방법이 있습니까 ?
나는 단지 할 수 있다는 것을 알고 있지만 source my.sh
소싱은 함께 실행하는 것과 같지 않으며 ./my.sh
후자를 원합니다.
답변1
스크립트를 작성하는 대신 작성을 고려하십시오.기능(기존 스크립트를 함수로 변환) 이렇게 하면 다시는 권한에 대해 걱정할 필요가 없습니다.
스크립트는 함수로 쉽게 변환됩니다.
프로젝트마다 다른 기능이 필요한 경우 다음을 사용하는 것이 좋습니다.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