Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How can I take STDIN and use it on the bash shell to set an environment variable?

I'm trying to get better at one-liners here, this is what I have currently.

$ echo $PATH
/home/ubuntu/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games

What I want to do is strip off that first chunk, so here's what I've figured out so far ---

$ echo $PATH | sed -e "s|^/[A-Za-z/]*:||"
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games

The last thing I want to do here is to put that back into PATH, like export PATH=[that result]

The way I've tried this was as follows, which I can't get to work ---

$ echo $PATH | sed -e "s|^/[A-Za-z/]*:||" | xargs export PATH=
xargs: export: No such file or directory

Also, BTW, separate issue that confused me was with the sed expression above, for some reason when I tried using + rather than *, it wouldn't catch the first bit. Look ---

$ echo $PATH | sed -e "s|^/[A-Za-z/]+:||" 
/home/ubuntu/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games

Its like the +, meaning "one or more" doesn't work as well as the "many" *.

like image 881
Tom Avatar asked Dec 16 '22 08:12

Tom


1 Answers

I think the best solution for that particular problem is:

export PATH=${PATH#*:}

But that doesn't answer the question of how to use stdin to set an environment variable.

It's easy to use some process' stdout:

export PATH=$(make_new_path)

But that's not strictly speaking using stdin. The obvious solution:

make_new_path | export PATH=$(cat)

won't work because the commands to the right of the pipe are executed in a subshell, so variable settings won't stick. (If it had worked, it would have been an UUOC.)

As Gordon Davisson points out in a comment, you could simply use:

read -r PATH; export PATH

Also, it is actually not necessary to export PATH, since PATH comes pre-exported, but I left it in for the case where you want to use some other environment variable.

like image 138
rici Avatar answered Dec 26 '22 15:12

rici