Bash Export Command

UNIX export command

When you execute a program the child program inherits its environment variables from the parent. For instance if $HOME is set to /root in the parent then the child's $HOME variable is also set to /root.

This only applies to environment variable that are marked for export. If you set a variable at the command-line like

$ FOO="bar"

That variable will not be visible in child processes. Not unless you export it:

$ export FOO

You can combine these two statements into a single one in bash (but not in old-school sh):

$ export FOO="bar"

Here's a quick example showing the difference between exported and non-exported variables. To understand what's happening know that sh -c creates a child shell process which inherits the parent shell's environment.

$ FOO=bar
$ sh -c 'echo $FOO'

$ export FOO
$ sh -c 'echo $FOO'
bar

Note: To get help on shell built-in commands use help export. Shell built-ins are commands that are part of your shell rather than independent executables like /bin/ls.

How to run Bash 'export' command from a file in Linux?

I had to do the following to fix;

source ./test

Or you can convert the file to a ".txt" extension and then use

source test.txt 

to export the variable.

What does the 'export' command do?

export in sh and related shells (such as Bash), marks an environment variable to be exported to child-processes, so that the child inherits them.

export is defined in POSIX:

The shell shall give the export attribute to the variables corresponding to the specified names, which shall cause them to be in the environment of subsequently executed commands. If the name of a variable is followed by = word, then the value of that variable shall be set to word.

Unix export command path


how do I get NiFi to run it?

Use env to run a command with modified environment.

/usr/bin/env GOOGLE_APPLICATION_CREDENTIALS='/temp/abc.json' gsutil

bash export command in powershell

The description of the shell command is already in the document that you provide.

$ export $(grep -v '^#' .azure-env | xargs)

This uses grep to go through your .azure-env file excluding any lines
that are comments, passing any values into xargs so they will be
formatted to be interpreted by the shell. We then export these so
they´re passed as environment variables to the commands we envoke.

And you can convert the shell command into PowerShell like this:

Get-Content .\azure.txt | Select-String -NotMatch "^#" | ForEach-Object { 
$array= $_[0].ToString().split("=")
[System.Environment]::SetEnvironmentVariable($array[0], $array[1])
}

The screenshot of the result shows here:

Sample Image

Bash export variables but only for current command

If you wrap the command in parentheses, the exports will be scoped to within those parens and won't pollute the global shell namespace:

(export $(cat app-env-vars.txt | xargs) && node my-script.js)

Echo'ing one of the environment variables from the app.env file after executing the command will show it as empty.

Bash export command

export is a Bash builtin, echo is an executable in your $PATH. So export is interpreted by Bash as is, without spawning a new process.

You need to get Bash to interpret your command, which you can pass as a string with the -c option:

bash -c "export foo=bar; echo \$foo"

ALSO:

Each invocation of bash -c starts with a fresh environment. So something like:

bash -c "export foo=bar"
bash -c "echo \$foo"

will not work. The second invocation does not remember foo.

Instead, you need to chain commands separated by ; in a single invocation of bash -c:

bash -c "export foo=bar; echo \$foo"

export command with variable name and value from other variable declaration in bash script

Try as below:

name='COMPANY_NAME'
value='System Manager'

command="$name=$value"
echo $command
export "$command"

Notice the change in third and last statement (important)

Explanation: Unquoted expansion treats white space as token to separate.

Can I export a variable to the environment from a Bash script without sourcing it?


Is there any way to access to the $VAR by just executing export.bash without sourcing it ?

Quick answer: No.

But there are several possible workarounds.

The most obvious one, which you've already mentioned, is to use source or . to execute the script in the context of the calling shell:

$ cat set-vars1.sh 
export FOO=BAR
$ . set-vars1.sh
$ echo $FOO
BAR

Another way is to have the script, rather than setting an environment variable, print commands that will set the environment variable:

$ cat set-vars2.sh
#!/bin/bash
echo export FOO=BAR
$ eval "$(./set-vars2.sh)"
$ echo "$FOO"
BAR

A third approach is to have a script that sets your environment variable(s) internally and then invokes a specified command with that environment:

$ cat set-vars3.sh
#!/bin/bash
export FOO=BAR
exec "$@"
$ ./set-vars3.sh printenv | grep FOO
FOO=BAR

This last approach can be quite useful, though it's inconvenient for interactive use since it doesn't give you the settings in your current shell (with all the other settings and history you've built up).



Related Topics



Leave a reply



Submit