ให้แก้ปัญหาอับละอองเกสรดำเนินการกับตะขอเปลือกdirenv
และ วิธีแก้ไขปัญหาต่อไปนี้อาจเข้ากันได้มากกว่าในกรณีsetfacl
ที่ระบบของคุณไม่สามารถใช้งานได้ (เช่น macOS)
direnv
เป็นตัวสลับสภาพแวดล้อมสำหรับเชลล์ มันรู้วิธีที่จะขอเข้าสู่ทุบตี zsh, tcsh, หอยปลาและภูติโหลดหรือขนตัวแปรสภาพแวดล้อมทั้งนี้ขึ้นอยู่กับไดเรกทอรีปัจจุบัน
ใช้.envrc
ในการexport
กำหนดเองumask
ค่าสำหรับ dir ที่เฉพาะเจาะจงและexport
var เอ็ด env จะถูกยกเลิกการโหลดเมื่อคุณออกจากผบว่า
# example .envrc file
export UMASK=0022
กำหนด hook เพื่อเปลี่ยนumask
ค่าเมื่อเปลี่ยน dir ที่ทำงาน
function _umask_hook {
if [[ -n $UMASK ]]; then
umask "$UMASK"
elif [[ $OSTYPE == darwin* ]]; then
umask 0077
else
umask 0022
fi
}
# To make the code more reliable on detecting the default umask
function _umask_hook {
# Record the default umask value on the 1st run
[[ -z $DEFAULT_UMASK ]] && export DEFAULT_UMASK="$(builtin umask)"
if [[ -n $UMASK ]]; then
umask "$UMASK"
else
umask "$DEFAULT_UMASK"
fi
}
# zsh hooks
# trigger _umask_hook once working dir is changed
add-zsh-hook chpwd _umask_hook
# bash
# Append `;` if PROMPT_COMMAND is not empty
PROMPT_COMMAND="${PROMPT_COMMAND:+$PROMPT_COMMAND;}_umask_hook"
ในตอนนี้การเริ่มต้น direnv hook สำหรับ zsh ไม่รองรับchpwd
hook หากคำขอเกี่ยวกับการดึงGH-514ยังไม่ถูกรวมเข้าด้วยกันเมื่อคุณเห็นหน้านี้ โปรดแสดงความคิดเห็นeval "$(direnv hook zsh)"
และขอdirenv
เกี่ยวchpwd
ด้วยตนเองด้วยรหัสต่อไปนี้
if (( $+commands[direnv] )) && ! (( $+functions[_direnv_hook] )); then
_direnv_hook() {
eval "$(command "direnv" export zsh)";
}
typeset -agU precmd_functions;
if [[ -z ${precmd_functions[(r)_direnv_hook]} ]]; then
precmd_functions=( _direnv_hook ${precmd_functions[@]} )
fi
typeset -agU chpwd_functions;
if [[ -z ${chpwd_functions[(r)_direnv_hook]} ]]; then
chpwd_functions=( _direnv_hook ${chpwd_functions[@]} )
fi
fi
ที่มา: dynamic-umask-based-on-cwd.md