2013-10-27 9 views
9

私はbashスクリプトから環境変数でファイルを取得しようとしていますが、動作しません。bashスクリプトからファイルを取り出す方法

これは~/scripts/test.shにある私のスクリプト(test.sh)の内容です。

#!/bin/bash 
FILE_NAME=/tmp/source_file 
touch $FILE_NAME 
echo "export TEST=\"test\"" > $FILE_NAME 
source $FILE_NAME 

それから私は、my ~/.bashrcaliasを使用しています。

alias testScript=~/scripts/test.sh 

しかし、私は私のスクリプトtestScriptを使用する場合、それは環境変数を設定しませんでした。

+0

あなたは「それは、環境変数を設定しなかった」とはどういう意味ですか?期待した結果は何ですか? –

+0

echo $ TESTを試しても値が表示されません – franki3xe

+0

ファイル '/ tmp/source_file'にはあなたの期待する内容が含まれていますか? –

答えて

9

環境変数は、プロセスツリーの下流にのみ流れます。

あなたは、bashのプロセスにtestScriptを入力すると、それは子プロセスを作成し、幹部/bin/bashまたは任意の任意の環境変数は、子プロセスでのみが残っ設定#!

によって設定されています。 Exportを実行すると、その子から生成された追加の孫(その子の子)に変数がコピーされます。

何も親にコピーできません。ファイルを実行する代わりにsourceを使う必要があります。ジョナサンの答えを見てください。

ファイル~/.bashrcまたは~/.loginを編集して、頻繁に必要な環境変数を設定できます。

exportの詳細については、bashを参照してください。https://superuser.com/q/153371およびhttps://superuser.com/questions/18988/difference-between-a-b-and-export-a-b-in-bashも参照してください。

alias testScript=". ~/scripts/test.sh" 

ファイルをソースする:

9

あなたが使用する必要があります。あるいは、.の代わりにsourceを使うことができますが、私はCシェルがあまり好きではないので、sourceのようなCシェルの記法は使用しません。他の方法のどれもが私のために働いていない

+0

これはまさに私が必要としていたものです。上向き –

3

[. ./path/to/filesource /path/to/file、別名、等...]、this tutorialのおかげで、私が使用していることを見つけ、まで:

#!/usr/bin/env bashシェバング

の代わりに#!/usr/bin/envの方が引数が通訳者に渡されます。私はここの鍵だと思います。詳細はthis documentを参照してください。問題がある可能性がありますいずれにしても

いかなる形式のソースコマンドがあなたのために働いていない場合、あなたのシェバングをチェックしてみてくださいは、:)