Defining common variables across multiple scripts?

僤鯓⒐⒋嵵緔 提交于 2019-12-01 08:02:06

When you run a shell script, it's done in a sub-shell so it cannot affect the parent shell's environment. So when you declare a variable as key=value its scope is limited to the sub-shell context. You want to source the script by doing:

. ./myscript.sh

This executes it in the context of the current shell, not as a sub shell.

From the bash man page:

. filename [arguments]
source filename [arguments]

Read and execute commands from filename in the current shell environment and return the exit status of the last command executed from filename.

If filename does not contain a slash, file names in PATH are used to find the directory containing filename. 

Also you can use the export command to create a global environment variable. export governs which variables will be available to new processes, so if you say

FOO=1
export BAR=2
./myscript2.sh

then $BAR will be available in the environment of myscript2.sh, but $FOO will not.

Define environments variables : user level : in your ~/.profile or ~/.bash_profile or ~/.bash_login or ~/.bashrc system level : in /etc/profile or /etc/bash.bashrc or /etc/environment

For example add tow lines foreach variable :

FOO=myvalue
export FOO 

To read this variable in bash script :

#! /bin/bash

echo $FOO

in perl script :

#! /bin/perl

print $ENV{'FOO'};
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!