提问人:James Starlight 提问时间:10/19/2023 最后编辑:James Starlight 更新时间:10/19/2023 访问量:56
bash:.bashrc 中的环境变量
bash: environmental variables within .bashrc
问:
以下 bash 函数定义了两个环境变量,它们将与位于外部 USB 上的脚本 test.sh 一起使用。
quick_function(){
export curent_dir=$(pwd)
export ref_folder="${home}"
local quick_path=$(find /media/$USER -type f -name test.sh)
# run script located on the usb stick from the current directory
chmod +x "$quick_path"
"$quick_path"
}
目的是在当前目录中产生一些test_dir(而不是在 script.sh 所在的 U 盘上)。这是 test.sh
# the both input paths are commented since they have been already provided in the function defined in .bashrc
#curent_dir=$(pwd)
#ref_folder="${home}"
mkdir "$ref_folder"/test_dir
出于测试目的,我取消了 test.st 中定义的 $curent_dir 和 $ref_folder 的注释,并且(令人惊讶地)发现从 quick_function () 调用的脚本仍然在我打开终端的任何地方产生test_dir(并且从未在 U 盘上......
这是否意味着在这个例子中,我不需要在函数中导出两个环境变量,或者这些变量总是在随后执行的脚本中定义的变量(具有相同的名称)上从同一函数?
答:
导出似乎还可以。我假设,问题出在()上。这看起来好像您假设该变量将包含主目录的路径(例如)。但是,打印当前目录的路径,因此新目录的位置将始终位于工作目录中。export
home=$(pwd)
home
/home/yourusername/
pwd
无论哪种方式,您都不需要环境变量。
- 要在工作目录中创建新目录,请使用
mkdir test_dir
- 要在主目录中创建新目录,请使用 或 .
mkdir ~/test_dir
mkdir "$HOME/test_dir"
在我打开终端的任何地方产生test_dir(而不是在 U 盘上......
听起来您想在 U 盘上创建新目录,就在 旁边。在那种情况下......test.sh
- 你可以在你的 after 被定义和 before 被调用
export ref_folder="$(dirname "$quick_path")"
quick_function()
quick_path
test.sh
- 但是,在内部使用会更容易,而不是手动处理该变量。
dirname
$0
$BASH_SOURCE
test.sh
ref_folder
出于测试目的,我取消了 test.st 中定义的 $home 和 $ref_folder 的注释,并发现从 quick_function() 调用的脚本仍然在我打开终端的任何地方生成test_dir
因为这些变量的定义是相同的。
这是否意味着 [...][exported] 变量总是从同一函数的后续执行脚本中定义的变量(具有相同的名称)?
反之亦然!最内层作用域 (test.sh) 中的变量会隐藏从外部作用域 (quick_function()) 导出的变量。
评论
$HOME
评论
.bashrc
.bash_profile
.bashrc
export curent_dir
quick_path
$PWD
$PWD
$(pwd)
~
/bin/ls
~
/bin
cd /somewhere/else
chdir()
cd