diff options
author | Tuowen Zhao <ztuowen@gmail.com> | 2020-04-24 20:54:33 -0600 |
---|---|---|
committer | Tuowen Zhao <ztuowen@gmail.com> | 2020-04-24 20:54:33 -0600 |
commit | c197ad40f1dca62fd1e0e555e7bfc84e39f31223 (patch) | |
tree | 5c1e753e0ff2cb9d0e08a699f17352225b9ef9f1 /plugins/dotenv/dotenv.plugin.zsh | |
parent | 0b67340fd2fe9330d8487491e1983ad1a111fb2b (diff) | |
parent | 2560f04982dfc2693221c7c0f47d1a71df09a794 (diff) | |
download | zsh-c197ad40f1dca62fd1e0e555e7bfc84e39f31223.tar.gz zsh-c197ad40f1dca62fd1e0e555e7bfc84e39f31223.tar.bz2 zsh-c197ad40f1dca62fd1e0e555e7bfc84e39f31223.zip |
Merge branch 'master' of https://github.com/ohmyzsh/ohmyzsh
Diffstat (limited to 'plugins/dotenv/dotenv.plugin.zsh')
-rw-r--r-- | plugins/dotenv/dotenv.plugin.zsh | 51 |
1 files changed, 31 insertions, 20 deletions
diff --git a/plugins/dotenv/dotenv.plugin.zsh b/plugins/dotenv/dotenv.plugin.zsh index 54036bee3..ac3210d7f 100644 --- a/plugins/dotenv/dotenv.plugin.zsh +++ b/plugins/dotenv/dotenv.plugin.zsh @@ -1,35 +1,46 @@ +## Settings + +# Filename of the dotenv file to look for +: ${ZSH_DOTENV_FILE:=.env} + +# Path to the file containing allowed paths +: ${ZSH_DOTENV_ALLOWED_LIST:="${ZSH_CACHE_DIR:-$ZSH/cache}/dotenv-allowed.list"} + + +## Functions + source_env() { if [[ -f $ZSH_DOTENV_FILE ]]; then - if [ "$ZSH_DOTENV_PROMPT" != "false" ]; then - # confirm before sourcing file - local confirmation - # print same-line prompt and output newline character if necessary - echo -n "dotenv: source '$ZSH_DOTENV_FILE' file in the directory? (Y/n) " - read -k 1 confirmation; [[ "$confirmation" != $'\n' ]] && echo - # only bail out if confirmation character is n - if [[ "$confirmation" = [nN] ]]; then - return + if [[ "$ZSH_DOTENV_PROMPT" != false ]]; then + local confirmation dirpath="${PWD:A}" + + # make sure there is an allowed file + touch "$ZSH_DOTENV_ALLOWED_LIST" + + # check if current directory's .env file is allowed or ask for confirmation + if ! grep -q "$dirpath" "$ZSH_DOTENV_ALLOWED_LIST" &>/dev/null; then + # print same-line prompt and output newline character if necessary + echo -n "dotenv: found '$ZSH_DOTENV_FILE' file. Source it? ([Y]es/[n]o/[a]lways) " + read -k 1 confirmation; [[ "$confirmation" != $'\n' ]] && echo + + # check input + case "$confirmation" in + [nN]) return ;; + [aA]) echo "$dirpath" >> "$ZSH_DOTENV_ALLOWED_LIST" ;; + *) ;; # interpret anything else as a yes + esac fi fi # test .env syntax zsh -fn $ZSH_DOTENV_FILE || echo "dotenv: error when sourcing '$ZSH_DOTENV_FILE' file" >&2 - if [[ -o a ]]; then - source $ZSH_DOTENV_FILE - else - set -a - source $ZSH_DOTENV_FILE - set +a - fi + setopt localoptions allexport + source $ZSH_DOTENV_FILE fi } autoload -U add-zsh-hook add-zsh-hook chpwd source_env -if [[ -z $ZSH_DOTENV_FILE ]]; then - ZSH_DOTENV_FILE=.env -fi - source_env |