引言
写个脚本自动运行的时候偶尔会发生一种输出文件乱码或者找不到软件的情况, 很显然是由于sh
文件运行环境和terminal
运行环境不一致导致的, 因此只要指定本机的运行环境, 就可以使脚本正常运行.
过程
获取env
文件
首先, 我们可以在terminal
中运行env
来获得各种参数, 比如我的就是:
显然, 里面有对于脚本有用的, 比如LC_ALL=en_US.UTF-8;LANG=en_US.UTF-8
就是输出文件乱码的解决方法,
而PATH=...
就是找不到软件的解决办法.
而其他大多数没有用的,
但是无所谓, 因为我很懒而且不在乎性能, 所以我全都要.
咱们可以比较一下在terminal
输出的和定时脚本输出的区别.
使用env > ~/env.txt
可以把环境参数输出到自己的根目录.
我们新建一个sh
脚本:
#!/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行:
所以保存下来terminal
的env
文件以下次使用是挺方便的.
读取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
结论
通过这样的方法, 可以获得相对一致的运行环境, 保证脚本正常运行.
引用
- 【已解决】linux终端出现中文乱码_export lang="en_us";export language="en_us";export-CSDN博客