~/ にないスクリプトから ~/.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"

おすすめ記事