Zsh脚本不会设置环境变量

时间:2020-01-17 00:55:22

标签: unix terminal environment-variables zsh

我想编写一个脚本,该脚本将使用标志/开关接受用户输入,然后从该数据中设置ENV变量。

该文件名为“ set_env.zsh”。

!#/bin/zsh
while getopts eilt option
do
  case "${option}"
  in
  e) ENVIRON=${OPTARG};;
  i) ID=${OPTARG};;
  l) LOGIN=${OPTARG};;
  t) TOKEN=${OPTARG};;
  esac
  echo $option
done

if [ $#ENVIRON -gt 0 ];then
  export PRINTER_ENV=$ENVIRON
  echo $PRINTER_ENV

elif [ $#ID -gt 0 ];then
  export PRINTER_ID=$ID
  echo $PRINTER_ID

elif [ $#LOGIN -gt 0 ];then
  export PRINTER_EMAIL=$LOGIN
  echo $PRINTER_EMAIL

elif [ $#PRINTER_TOKEN -gt 0 ];then
  export PRINTER_TOKEN=$TOKEN
  echo $PRINTER_TOKEN
fi

要执行脚本:

source set_env.sh -e DEVELOPMENT -i printer_01 -l my_email@email.com -t my_tokens

当我使用printenv检查ENV变量时,没有设置任何变量。

但是,当我运行相同的脚本并在其中放入export TEST=test作为要执行的第一行实际代码时,然后运行printenv之后,该脚本会成功保存ENV变量

对此事有任何见识,将不胜感激!

1 个答案:

答案 0 :(得分:2)

您的region: Queensland fuel type: Black Coal value: 5536.51307 --- region: Queensland fuel type: Gas value: 560.24621 --- region: Queensland fuel type: Liquid Fuel value: 0.0 --- region: Queensland fuel type: Other value: 23.9 --- region: Queensland fuel type: Hydro value: 18.415 --- # etc. 字符串不允许使用选项参数。

更改自:

getopts

收件人:

while getopts elit option

...告诉while getopts e:l:i:t option ,每个getopts-e-l-i之后都应该有选项参数。否则,getopts第一次在参数列表中看到非选项(例如,在示例中为字符串-t)时,将退出循环(通过返回false值)。


此外,要提高与zsh以外的Shell的兼容性,请考虑更改:

DEVELOPMENT

...到...

# This is zsh-only
if [ $#FOO -gt 0 ]; then