我可以创建一个可在系统中任何地方访问的 shell 变量吗?

我可以创建一个可在系统中任何地方访问的 shell 变量吗?

我正在编写一个脚本,需要存储一个变量的值。下次运行脚本时将使用此值。首先我想到将其存储在一个文件中。然后这个疯狂的想法浮现在我的脑海里。我是否可以这样创建一个变量,如果我在其中存储一个值,关闭终端并打开另一个终端,该值仍然存在?

我可以让 shell 变量完全全局化,就像在任何地方都可以访问一样吗?

答案1

没有“全局环境变量空间”。如果你想让你的数据执着的,那么你需要将其存储在某个文件中。例如:

#!/bin/sh
# Path to the persistent storage file
file=~/name.txt

# If the persistent file exists, use its contents as name
if [ -e "$file" ]; then
    name=$(cat "$file")
else
    # Use a default value otherwise
    name="Bob"
fi

echo "Your name was: $name"
echo "What is your name?"
read new_name

# If a new (non-empty) name is given, save it to the file
if [ -n "$new_name" ]; then
    echo "$new_name" > "$file"
fi

如果要使变量对每个新进程都可用,则可以将其放入/etc/environment(需要 root 权限)或~/.profile。一旦将其放入这些变量中,通常必须重新登录。除非绝对必要,否则我不建议采用这种方法。它将内容放入每一个(新)过程,因此它不适合存储密码或大值。

我可以以这样的方式创建一个变量,如果我在其中存储一个值,关闭终端并打开另一个终端,该值仍然存在?

好吧,如果你只想将值暴露给交互式 shell 会话,那么你可以把它放在你的 中~/.bashrc。试试看,附加echo "Hello $USER"到文件中。每次打开新 shell 时都会执行它。由于有一行如下内容,因此对于图形登录等不会执行它:

# If not running interactively, don't do anything
[ -z "$PS1" ] && return

相关内容