~/ にないスクリプトから ~/.bash_aliases を取得します。

~/ にないスクリプトから ~/.bash_aliases を取得します。

スクリプトでエイリアスを更新したいです。

いくつかの新しいエイリアスがあります~/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とエイリアスが更新されインポートされます。

関連情報