为shell脚本创造相对一致的环境变量--以MacOS为例

2023-10-05 14:38:24 浏览数 (1)

引言

写个脚本自动运行的时候偶尔会发生一种输出文件乱码或者找不到软件的情况, 很显然是由于sh文件运行环境和terminal运行环境不一致导致的, 因此只要指定本机的运行环境, 就可以使脚本正常运行.

过程

获取env文件

首先, 我们可以在terminal中运行env来获得各种参数, 比如我的就是:

显然, 里面有对于脚本有用的, 比如LC_ALL=en_US.UTF-8;LANG=en_US.UTF-8就是输出文件乱码的解决方法,

PATH=...就是找不到软件的解决办法.

而其他大多数没有用的,

但是无所谓, 因为我很懒而且不在乎性能, 所以我全都要.

咱们可以比较一下在terminal输出的和定时脚本输出的区别.

使用env > ~/env.txt可以把环境参数输出到自己的根目录.

我们新建一个sh脚本:

代码语言:shell复制
#!/bin/bash

env > ~/env.txt

我的脚本名字是Untitled-1.sh, 绝对路径是/Users/tenney/Downloads/Untitled-1.sh.

terminal里面运行bash /Users/tenney/Downloads/Untitled-1.sh得到env文件, 大约有30行内容.

然后使用crontab -e命令新建一个自动化, 内容是* * * * * bash /Users/tenney/Downloads/Untitled-1.sh, 意思是每秒运行一次创造env文件的脚本. 得到的文件如下, 可以看到仅有8行:

所以保存下来terminalenv文件以下次使用是挺方便的.

读取env文件

代码语言:shell复制
# Set environment variables

# 检查 env.txt 文件是否存在

if [ -f "${HOME}/env.txt" ]; then

  # 如果 env.txt 存在,则运行相应的命令

  while IFS='=' read -r key value; do

    echo "$key=$value"

    export "$key"="$value"

  done < "${HOME}/env.txt"

else

  # 运行其他命令

  echo "env.txt 文件不存在"

fi

结论

通过这样的方法, 可以获得相对一致的运行环境, 保证脚本正常运行.

引用

  1. 【已解决】linux终端出现中文乱码_export lang="en_us";export language="en_us";export-CSDN博客

0 人点赞