[英]Assigning a variable in a shell script for use outside of the script
我有一个设置变量的shell脚本。 我可以在脚本内部访问它,但我不能在脚本外部访问它。 是否可以使变量全局化?
正如预期的那样,在创建之前访问变量不会返回任何内容:
$ echo $mac
$
创建脚本以创建变量:
#!/bin/bash
mac=$(cat \/sys\/class\/net\/eth0\/address)
echo $mac
exit 0
正如预期的那样,运行脚本会给出当前的 mac 地址:
$ ./mac.sh
12:34:56:ab:cd:ef
$
在创建变量后访问该变量不返回任何内容,不期望:
$ echo $mac
$
有没有办法可以在命令行和其他脚本中访问这个变量?
子进程不能像那样影响父进程。
您必须使用.
(dot) 命令——或者,如果你喜欢 C shell 符号, source
命令——读取脚本(因此. script
或source script
):
. ./mac.sh
source ./mac.sh
或者您在标准输出上生成赋值并使用eval $(script)
来设置变量:
$ cat mac.sh
#!/bin/bash
echo mac=$(cat /sys/class/net/eth0/address)
$ bash mac.sh
mac=12:34:56:ab:cd:ef
$ eval $(bash mac.sh)
$ echo $mac
12:34:56:ab:cd:ef
$
请注意,如果在为 dot 或 source 命令指定脚本时不使用斜杠,则 shell 将在$PATH
列出的目录中搜索脚本。 脚本不必是可执行的; 可读就足够了(只读是有益的,因为您不能意外运行脚本)。
目前尚不清楚路径名中的所有反斜杠除了混淆之外还应该做什么; 他们是不必要的。
有关生成此类脚本的先例,请参阅ssh-agent
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.