运行脚本后bash变量不可用

时间:2017-04-20 19:46:59

标签: bash variables terminal

我有一个shell脚本,它将我的IP地址分配给一个变量,但在运行脚本后,我无法访问bash中的变量。如果我在脚本中放置了一个echo,它将打印变量,但是在脚本运行完毕后它不会保存它。

有没有办法在运行后更改脚本以访问它?

ip=$(/sbin/ifconfig | grep "inet " | awk '{print $2}' | grep -v 127 | cut -d":" -f2)

我在Mac上使用终端。

1 个答案:

答案 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 }'