bashスクリプトはエイリアスを生成したり$ PS1を更新したりしません。

bashスクリプトはエイリアスを生成したり$ PS1を更新したりしません。

よく使うエイリアスを設定し、コマンドプロンプトを変更するためにbashスクリプトを書く必要があると思いました。

以下は私のスクリプトです。

#!/bin/bash
# Make useful aliases
alias c='clear'
alias p='pwd'
alias d='pwd'
alias l='ls -l'
alias clp='clear;pwd'
# Prompt
PS1='unix % '
# Echo to check if script runing
echo 'Hello world'

ただし、このスクリプトを実行すると(実行権限を付与した後)、エイリアスは追加されません。プロンプトもPS1によって提供された値に更新されません。それでもechoが出てくるHello worldので、スクリプトが実行されているようです。

user $ ./myEnv.sh 
Hello world
user $ d
d: command not found
user $

エラーはどこにありますか?

答え1

スクリプトが独自の環境でこれらの変数を生成するのは簡単です。その後、終了すると、特定の環境が破壊され、これらの変数が目的の方法で設定されていない親シェル環境に戻ります。

実行するのではなく、このようにインポートする必要があります。. myEnv.sh

答え2

スクリプトは独自のインスタンスにエイリアスを生成します。他のインスタンスや親の bash インスタンスではエイリアスを使用できません。また、プロンプトは特定の bash インスタンス内でのみ変更されます。

答え3

他の人が言ったように、エイリアスや変更された環境変数などを適用するには、スクリプトをインポートする必要があります。

ただし、この方法の欠点は、パスでスクリプトを実行することはできますが、この方法ではスクリプトを取得できないことです。つまり、エイリアスを含めるたびにフルパスを指定する必要があります。これは少し迷惑かもしれません。

これを回避するには、~/.bashrc起動時にbashシェルが対話式に実行されたときにファイルをインポートします。自動的にしたがって、このファイルにエイリアスを定義すると、その時点から新しく開始されたすべてのシェルで使用できます。

エイリアスを指定したくない場合いつも利用可能な場合機能あなたの~/.bashrc

addaliases() {
    alias c='clear'
    alias p='pwd'
    # ... and so on
}

これで、次にbashを起動するとaddaliases コマンドラインから実行でき、エイリアスが追加されます。

bashを使用せずに他のシェルを使用している場合は、明らかにに入れないで、~/.bashrc使用している特定のシェルに完全に依存する別のファイルに入れる必要があります。

関連情報