gpt4 book ai didi

bash - 如何定义一个 shell 脚本变量以在脚本之外具有作用域

转载 作者:行者123 更新时间:2023-11-29 08:59:25 27 4
gpt4 key购买 nike

我正在使用 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) 作为每个用户的初始化脚本。参见 this reference有关特定于 bash 的详细信息。如果您使用不同的 shell,请尝试其各自的手册。

关于bash - 如何定义一个 shell 脚本变量以在脚本之外具有作用域,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8153923/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com