我有一个shell脚本,它将我的IP地址分配给一个变量,但在运行脚本后,我无法访问bash中的变量。如果我在脚本中放置了一个echo,它将打印变量,但是在脚本运行完毕后它不会保存它。
有没有办法在运行后更改脚本以访问它?
ip=$(/sbin/ifconfig | grep "inet " | awk '{print $2}' | grep -v 127 | cut -d":" -f2)
我在Mac上使用终端。
答案 0 :(得分:3)
默认情况下,脚本在子进程中运行,这意味着当前(调用)shell无法查看其变量。
您有以下选择:
使脚本输出信息(到stdout),以便调用shell可以捕获它并将其分配给自己的变量。这可能是最干净的解决方案。
ip=$(my-script)
源使脚本在当前 shell中运行而不是子进程的脚本。但请注意,对脚本环境中的所有修改都会影响当前的shell。
. my-script # any variables defined (without `local`) are now visible
将您的脚本重构为您在当前shell 中定义的函数(例如,将其放在~/.bashrc
中);再次,函数所做的所有修改都将对当前shell可见:
# Define the function
my-func() { ip=$(/sbin/ifconfig | grep "inet " | awk '{print $2}' | grep -v 127 | cut -d":" -f2); }
# Call it; $ip is implicitly defined when you do.
my-func
暂且不说:您可以按照以下方式简化命令:
/sbin/ifconfig | awk '/inet / && $2 !~ /^127/ { print $2 }'