Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

.bashrc not read when shell script is invoked from desktop shortcut

I have a simple problem understanding a behavior in linux. In short, on linux if i invoke my sh script from a 'Desktop Shortcut' then the script cannot see the latest environment variables (set in bashrc). So i was wondering that in what scope is this shell script located ?

To create a testcase and reproduce:

  1. Create a simple shell script 'testme.sh' :

    !/bin/sh
    echo "Hi This is a test script checking the env var";
    echo "TESTVAR = $TESTVAR";
    read in
    echo "Done";
    
  2. create a desktop shortcut for the script above.

     
    cd ~/Desktop
    vi mytest-desktop.desktop 
    
    
    //Contents for mytest-desktop.desktop are : 
    [Desktop Entry]
    Version=1.0
    Type=Application
    Name=TestAbhishek
    Exec=/home/abhishek/test/hello.sh
    Terminal=true
    
  3. Now update your .bashrc file to set the variable
   export TESTVAR=test_this_variable
   
  1. Open a brand new terminal and execute the script using it's complete path like '~/testme.sh' //This can see the value for variable 'TESTVAR' from the .bashrc file.

  2. Now, simply double click and execute the Desktop shortcut. //This should open a terminal and print out value for 'TESTVAR' as blank. //So my question is, who is the parent for the terminal opened by this shortcut?

I've tried this on RHL. Im looking for a solution or a w/a for this problem, hope someone can help soon.

Thanks, Abhishek.

like image 914
Abhishek Avatar asked Dec 18 '10 08:12

Abhishek


People also ask

How do I make a bash script executable from desktop?

You can add a . command extension to your text script. Then use chmod 744 to make it executable. When opened or double-clicked in the Finder it will then run from the Terminal.

Does bashrc run on login?

bashrc file is a hidden script file containing various terminal session configurations. The file executes automatically in both interactive and non-interactive non-login shells.

How do I run a .sh file on my desktop?

So if the desktop will be available at /mnt/c/users/<username>/desktop. Type Bash in run prompt, and it will launch the distro prompt. Navigate to the folder using “cd” command to the folder where the scripts are available. Type “sh script.sh” and hit Enter.

How do you Ctrl D in shell script?

Ctrl-D : indicates the end of a file or stream of characters that you are entering on the command line.


1 Answers

See the INVOCATION section of the bash manpage. Here is an excerpt

When bash is invoked as an interactive login shell, or as a non-interactive shell with the --login option, it first reads and executes commands from the file /etc/profile, if that file exists. After reading that file, it looks for ~/.bash_profile, ~/.bash_login, and ~/.profile, in that order, and reads and executes commands from the first one that exists and is readable. The --noprofile option may be used when the shell is started to inhibit this behavior.

When a login shell exits, bash reads and executes commands from the file ~/.bash_logout, if it exists.

When an interactive shell that is not a login shell is started, bash reads and executes commands from ~/.bashrc, if that file exists. This may be inhibited by using the --norc option. The --rcfile file option will force bash to read and execute commands from file instead of ~/.bashrc.

Long story short, if you want non-interactive shell's to have certain ENV vars set, then put them in ~/.bash_profile instead of ~/.bashrc

like image 191
SiegeX Avatar answered Oct 17 '22 09:10

SiegeX