我正在尝试简化重复性的工作程序。为此,我尝试编写一个 .bashrc 脚本,该脚本将设置别名可以引用的全局路径变量。免责声明:我对 Linux 和脚本编写都很陌生,所以我不知道我目前采取的方法是否正确。
这是我到目前为止所写的内容。
SET_DIR=/var/www/
#Set the current site's root directory
function sroot (){
SET_DIR=/var/www/$1
setaliases
echo $SET_DIR
}
#Reinitialize aliases with new sroot
function setaliases(){
alias chk="echo $SET_DIR"
alias rt="cd $SET_DIR"
alias thm="cd $SET_DIR/sites/all/themes/"
alias mod="cd $SET_DIR/sites/all/modules"
}
setaliases
我想做的是扩展这个想法来定义数组或文件中的站点。然后使用一个函数来检查传递给 sroot 函数的值。这将依次在其他函数中设置变量。
#myfile or array
site=example1.com
theme=alpha
shortcut=x1
site=example2.com
theme=beta
shortcut=x2
例如“sroot x1”会影响
SET_DIR=/var/www/$site
# and
alias thm="cd $SET_DIR/sites/all/themes/$theme"
如何配置函数来检查数组中的值然后使用它的变量?
答案1
当你写:
alias thm="cd $SET_DIR/sites/all/themes/"
SET_DIR
您在定义别名时扩展了 的值。这意味着每次运行别名时都会获得相同的值,即使您在中间更改了变量值。如果您反斜杠转义,那么$
当您使用别名时,变量将被取消引用:
$ foo=hello
$ alias test="echo \$foo"
$ test
hello
$ foo=world
$ test
world
因此,如果您以这种方式定义别名,那么当您更改时就不需要重新定义它们SET_DIR
。您还可以用单引号引用别名定义。
对于您的数据文件,Bash 4 及更高版本支持关联数组,这可以让您像这样定义数据:
declare -A theme site # This makes these variables associative arrays
add_site() {
local shortcut=$1
theme[$shortcut]=$2
site[$shortcut]=$3
}
add_site x1 example1.com alpha
add_site x2 example2.com beta
然后您可以使用例如访问这些值${theme[x1]}
。您的别名可以采用以下形式:
alias thm="cd /var/www/\${site[\$CURRENT]}/sites/all/themes/\${themes[\$CURRENT]}"
然后你的sroot
函数就会设置CURRENT
为你想要的键。该别名始终会将您带到当前站点内的正确目录。
还有其他方法来具体定义数组,但这将为您提供总体思路。