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