スクリプトでエイリアスを更新したいです。
いくつかの新しいエイリアスがあります~/updateFiles/newAliases
。
alias ga='git add -A'
このアップデートスクリプトもあります~/updateFiles/updater
。
#!/bin/bash
cp newAliases ~/.bash_aliases
source ~/.bash_aliases
しかし、うまくいかないようです。通話環境をsource
新しいエイリアスに設定するにはどうすればよいですか?
これはうまくいきません:
$ cd ~/updateFiles
$ ./updater
$ ga
-su: ga: command not found
これは働きます:
$ cd ~/updateFiles
$ ./updater
$ source ~/.bash_aliases
$ ga
$
答え1
範囲と構文の違いは非常に微妙です。
$ ./updater
等しい
$ /bin/bash ./updater
スクリプトを実行します(実行可能としてマークされており、exec
そのオプションでマウントされたファイルシステムにある場合 - 後者の形式は、これらの条件のいずれかが満たされていなくても機能します)。これは、新しいシェルインスタンスを作成し、ここにスクリプトコンテンツを提供することを意味します。したがって、ここで定義されているエイリアスは、シェル期間中、つまりスクリプトが終了するまで解釈に制限されます。
$ . updater
$ . ./updater
$ source updater
$ source ./updater
同じことを意味しています。現在のコマンドラインに入力したようにファイルの内容を実行するシェルです。これは、エイリアス、関数、環境変数、シェルオプションの設定などをシェルで使用できることを意味します。
これが、~/.bashrc
次のようなシェル初期化ファイルが表示される理由です(Bashの場合)。
#!/bin/bash
for n in ~/etc/bash/*; do
. $n
done
次~/etc/bash
のように見えます。
~/etc/bash/
|-- bash.10.env
|-- bash.20.aliases
`-- bash.30.func
(名前はかなり自明です)。これらのinitディレクトリにいくつかのファイルを追加するたびに、次の手順を実行して変更を適用できます. ~/.bashrc
。もちろん、別名を指定することもできます。たとえば、ホスト名(またはbsg-gamesを使用する月のフェーズ)に基づいて特別なpom
初期化を実行するなど、拡張することもできます。
これらの設定に関する大きな注意点:初期化ファイルを「再入可能」にする必要があります。そのファイルをシェルから何回インポートしたかは関係ありません。たとえば、保持したい変数は条件付きで定義する必要があります。
VAR=${VAR:-"value"}
無条件ではなく:
VAR="value"
答え2
このファイルを入手する必要があります。それ以外の場合、エイリアスの寿命は非常に短くなります。つまり、呼び出すシェルの期間です。
私のもの.bashrc
:
if [ -f ~/.bash_aliases ]; then
. ~/.bash_aliases
fi
エイリアスを読んでください。このようなニックネームもあります:
alias realias='source ~/.bash_aliases'
私のファイルの先頭に.bash_aliases
。アップデート後にrealias
コマンドを実行してください。
答え3
スクリプトではこれを行うことはできないと思います。。スクリプトを使用するには、他の人が説明したように実行せずにインポートする必要があります。別の方法は関数を使用することです。次の行を次の項目に追加します~/.bashrc
。
updater(){
cp ~/newAliases ~/.bash_aliases
source ~/.bash_aliases
}
その後、実行するupdater
とエイリアスが更新されインポートされます。