エイリアスまたは関数でグローバル変数配列を使用する方法

エイリアスまたは関数でグローバル変数配列を使用する方法

私は繰り返しの作業ルーチンを単純化しようとしています。そのために、エイリアスが参照できるグローバルパス変数を設定する.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このエイリアスは常に現在のサイト内の正しいディレクトリに移動します。

配列を具体的に定義する別の方法がありますが、これは一般的なアイデアを提供します。

おすすめ記事