나는 반복적인 업무 루틴을 단순화하려고 노력하고 있습니다. 이를 위해 별칭이 참조할 수 있는 전역 경로 변수를 설정하는 .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
이 별칭은 항상 현재 사이트 내의 올바른 디렉터리로 이동합니다.
배열을 구체적으로 정의하는 다른 방법이 있지만 이것이 일반적인 아이디어를 제공합니다.