13

bash スクリプトから環境変数を使用してファイルを読み込もうとしていますが、うまくいきません。

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

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

それから私はで使用aliasmy ~/.bashrcます。

alias testScript=~/scripts/test.sh

しかし、スクリプトを使用するとtestScript、環境変数が設定されませんでした。

4

3 に答える 3

11

以下を使用する必要があります。

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

ファイルをソースします。source代わりに を使用することもできます.が、私は C シェルがあまり好きではないので、 などの C シェル表記は使用しませんsource

于 2013-10-27T18:06:41.417 に答える
9

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

bash プロセスに入力testScriptすると、子プロセスと execs/bin/bashまたはによって設定されたものは何でも作成されます#!

そこに設定された環境変数は、子プロセスにのみ残ります。エクスポートにより、その子から生成される可能性のある追加の孫 (その子の子) に変数がコピーされます。

親にコピーして戻すことはできません。ファイルを実行する代わりに、ソースを使用する必要があります。ジョナサンの答えを見てください。

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

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

于 2013-10-27T18:02:47.707 に答える
4

このチュートリアルsource /path/to/fileおかげ. ./path/to/fileで、

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

より単純な#!/usr/bin/envものの代わりに、引数をインタープリターに渡すことができます。これがここでの鍵だと思います。詳細については、このドキュメントを参照してください。

いずれにせよ、ソースコマンドが何らかの形式で機能しない場合は、シバンをチェックしてみてください。それが問題かもしれません:)

于 2016-08-21T01:27:59.427 に答える