我正在使用 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
or
. your_script.sh
(注意点后面的空格)。因为这里的命令里面your_script.sh
由当前 shell 运行,对脚本内环境所做的更改将被保留。
但是,如果运行脚本的 shell 不是您希望使用环境变量的 shell 的祖先,那么根本无法使用环境变量来实现您的目标。例如,如果您的脚本在初始化时由某个无子 shell 运行,则所有完成的环境设置都将永久丢失,不可逆转。在这种情况下,请使用其他一些机制,例如文件(可能位于/var
).
如果您希望给定 shell 的所有实例在其环境中设置某些变量,则可以使用大多数 shell 使用的初始化脚本。通常,它们有系统范围和每个用户的初始化脚本。例如,bash 使用/etc/profile
作为交互式登录 shell 的系统范围初始化脚本和$HOME/.bash_profile
(also $HOME/.bash_login
and $HOME/.profile
)作为每个用户的初始化脚本。看这个参考有关 bash 特定的详细信息。如果您使用不同的 shell,请尝试其各自的手册。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)