質問

私は貝殻のスクリプティングを軽くても挑戦してきました。私はしばらくするだけで私の ".profile"ファイルを再ロードできることを知っています:

. .profile
.

しかし、私は書いているBashスクリプトで同じを実行しようとしていて、それは働いていません。 何か案は?私が明確にすることができる他に何か?

ありがとう

役に立ちましたか?

解決

現在のシェルをリロードするために試してみてください:

source ~/.profile
.

他のヒント

これを試してみてください:

cd 
source .bash_profile
.

〜/ .profileファイルを再ロード/ソファイすることを試みると、いくつかの問題が発生します。 [これはUbuntu Linuxを指します - 場合によってはコマンドの詳細が異なります]

  1. あなたはこれをターミナルまたはスクリプト内で直接実行していますか?
  2. スクリプトでこれを実行しますか?
  3. 広告。 1)

    これを直接ターミナルで実行すると、サブシェルが作成されていないことを意味します。そのため、2つのコマンドを使用できます。

    source ~/.bash_profile
    
    .

    または

    . ~/.bash_profile
    
    .

    両方の場合では、.profileファイルの内容を含む環境を更新します。

    AD 2)

    を呼び出すことで、Bashスクリプトを起動できます。
    sh myscript.sh 
    
    .

    または

    . myscript.sh
    
    .

    最初のケースでは、システムの環境変数に影響を与えないサブシェルを作成し、サブシェルプロセスにのみ表示されます。サブシェルコマンドを終了した後、エクスポートなどのどれも適用されません。 これは一般的な間違いであり、多くの開発者が多くの時間を失う原因となります。

    スクリプトに変更が適用されるためにグローバル環境にエフェクトを有効にした場合、スクリプトを

    で実行する必要があります。
    .myscript.sh
    
    .

    コマンド

    スクリプトがサブシェルで実行されていないことを確認するには、この機能を使用できます。 (再びUbuntu Shell用)

    #/bin/bash
    
    preventSubshell(){
      if [[ $_ != $0 ]]
      then
        echo "Script is being sourced"
      else
        echo "Script is a subshell - please run the script by invoking . script.sh command";
        exit 1;
      fi
    }
    
    .

    私はこれが一般的な誤解のいくつかを明確にすることを願っています! :D. 頑張って!

bashスクリプトは別のサブシェルで動作します。この作品を作るためには、この他のスクリプトもソース化する必要があります。

試してみてください:

#!/bin/bash
# .... some previous code ...
# help set exec | less
set -- 1 2 3 4 5  # fake command line arguments
exec bash --login -c '
echo $0
echo $@
echo my script continues here
' arg0 "$@"
.

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top