繁体   English   中英

如何定义shell脚本变量以使脚本位于脚本之外

[英]How do I define a shell script variable to have scope outside of the script

我正在使用Ubuntu Natty。

我有一个shell脚本,我已保存到/etc/init.d/qstart。 shell脚本包含以下内容:

apt-get -y update
apt-get -y upgrade
apt-get -y install tofrodos gcc make nmap lsof expect sysstat
dbpass="mydbpassword"

但是,在我执行脚本之后,我想测试dbpass是否已设置,并在提示符中输入echo $dbpass 但它是空的。

如何在我的shell脚本中定义一个变量,以便我可以在它之外访问它?!

提前致谢。

您无法在父进程的环境中设置变量。 您只能设置当前流程的环境或为流程的子项准备环境。

也就是说,您可以指示shell在当前shell进程中从脚本运行命令,而不是分支新shell。 你可以这样做:

source your_script.sh

要么

. your_script.sh

(注意点后面的空格)。 由于your_script.sh中的命令由当前shell运行,因此将保留对脚本内部环境所做的更改。

但是,如果运行脚本的shell不是您希望使用环境变量的shell的祖先,那么根本无法使用环境变量实现目标。 例如,如果脚本在初始化时由某些无子shell运行,则所有环境设置都会完全丢失。 在这种情况下,使用一些其他机制,如文件(可能在/var )。

如果希望给定shell的所有实例都在其环境中设置某些变量,则可以使用大多数shell使用的初始化脚本。 通常,它们具有系统范围和每用户初始化脚本。 例如,bash使用/etc/profile作为交互式登录shell的系统范围初始化脚本,并使用$HOME/.bash_profile (也是$HOME/.bash_login$HOME/.profile )作为每用户初始化脚本。 有关特定于bash的详细信息,请参阅此参考 如果您使用其他外壳,请尝试相应的手册。

您不能在子进程中为父进程设置环境变量。 你可以做的是source script.sh. script.sh . script.sh而不是执行它,在这种情况下,它在相同的bash过程中执行,并保留所有更改。

此外,如果您希望在init脚本和其他地方设置相同的变量,可以将其放入/etc/default/something ,这更常见。 最后,你能source文件到bashrc/etc/profile.d/something文件。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM