我必须创建一个脚本来自动设置OpenVPN服务器。 在这个脚本中,我需要在/ etc / openvpn / easy-rsa /
中获取vars文件但是当我在/ etc / openvpn / easy-rsa /文件夹中执行以下脚本时(在脚本和vars文件上使用chmod 775),它会显示" xxxx.sh:3:xxxx .sh:来源:未找到:"
#!/bin/bash
source ./vars
当我写作。 ./vars,它有效,但是如果我想做一个./clean-all它会说:
请首先获取vars脚本(即" source ./vars") 确保您已对其进行了编辑以反映您的配置。
当我在同一个脚本中执行./clean-all时。 ./vars,它有效。
感谢您的帮助(抱歉我的英文不好:/)
答案 0 :(得分:2)
当您source
(或.
)文件时,其中的所有命令都会被读取并执行 - 这包括变量赋值。但是,当进行变量赋值时,它仅发生在当前shell中。当您运行脚本时,会创建一个子shell - 因此脚本中的任何变量只能在子shell中显示,而不是父(调用)shell。这就是为什么它在同一个脚本中运行source
和clean-all
时有效,如果你从命令行执行这两个操作它也应该有效,即:
$ . /etc/openvpn/easy-rsa/vars
$ /etc/openvpn/easy-rsa/clean-all