RE: Environment variable "PS4" can not be passed to bash script from version 4.2.46(2)
Got it, thanks for the info. Thanks, Fan -Original Message- From: Chet Ramey [mailto:chet.ra...@case.edu] Sent: Wednesday, October 24, 2018 4:48 AM To: Chen, Farrah ; bug-bash@gnu.org Cc: chet.ra...@case.edu Subject: Re: Environment variable "PS4" can not be passed to bash script from version 4.2.46(2) On 10/23/18 12:06 PM, Greg Wooledge wrote: > On Tue, Oct 23, 2018 at 03:20:12PM +, Chen, Farrah wrote: >> But in Bash script, it cannot work, it keeps its original value: >> [root@fchen ~]# cat test.sh >> #!/usr/bin/bash >> echo $PS4 >> echo $FAN > > This is because you're doing it as root. Bash strips PS4 from the > environment when started as root, as a security precaution. That change came in in bash-4.3 (patch 48). His vendor probably patched their version of bash-4.2 to do the same thing. -- ``The lyf so short, the craft so long to lerne.'' - Chaucer ``Ars longa, vita brevis'' - Hippocrates Chet Ramey, UTech, CWRUc...@case.eduhttp://tiswww.cwru.edu/~chet/
Re: Environment variable "PS4" can not be passed to bash script from version 4.2.46(2)
On 10/23/18 12:06 PM, Greg Wooledge wrote: > On Tue, Oct 23, 2018 at 03:20:12PM +, Chen, Farrah wrote: >> But in Bash script, it cannot work, it keeps its original value: >> [root@fchen ~]# cat test.sh >> #!/usr/bin/bash >> echo $PS4 >> echo $FAN > > This is because you're doing it as root. Bash strips PS4 from the > environment when started as root, as a security precaution. That change came in in bash-4.3 (patch 48). His vendor probably patched their version of bash-4.2 to do the same thing. -- ``The lyf so short, the craft so long to lerne.'' - Chaucer ``Ars longa, vita brevis'' - Hippocrates Chet Ramey, UTech, CWRUc...@case.eduhttp://tiswww.cwru.edu/~chet/
Re: Environment variable "PS4" can not be passed to bash script from version 4.2.46(2)
On Tue, Oct 23, 2018 at 03:20:12PM +, Chen, Farrah wrote: > But in Bash script, it cannot work, it keeps its original value: > [root@fchen ~]# cat test.sh > #!/usr/bin/bash > echo $PS4 > echo $FAN This is because you're doing it as root. Bash strips PS4 from the environment when started as root, as a security precaution. wooledg:~$ PS4='hello' bash -c 'set -x; true' hellotrue wooledg:~$ sudo env PS4='hello' bash -c 'set -x; true' [sudo] password for wooledg: + true Notice how it works as expected as a regular user, then "fails" under sudo.
Environment variable "PS4" can not be passed to bash script from version 4.2.46(2)
Hello, I found a strange phenomenon, just as the subject, environment variable "PS4" cannot be passed to bash script, but any other variable, even self-defined variable can be passed to bash script. My bash version is "GNU bash, version 4.2.46(2)-release (x86_64-redhat-linux-gnu)", I downloaded an old version bash-2.0.tar.gz from ftp://ftp.gnu.org/gnu/bash/ and installed, no such issue found, "PS4" works well. I tried to set PS4 in /etc/profile, in /etc/bashrc, and export PS4 in terminal, just like below, it is correct in current terminal, but cannot be passed to bash script. export PS4='+[#$LINENO ${FUNCNAME[0]}() $BASH_SOURCE] ' export FAN='Myself' Then source /etc/profile, /etc/bashrc, I also tried to reboot my machine. In terminal, it works well: [root@fchen ~]# echo $PS4 +[#$LINENO ${FUNCNAME[0]}() $BASH_SOURCE] [root@fchen ~]# echo $FAN Myself But in Bash script, it cannot work, it keeps its original value: [root@fchen ~]# cat test.sh #!/usr/bin/bash echo $PS4 echo $FAN [root@fchen ~]# bash test.sh bash test.sh + Myself Value of variable "Fan" I set in /etc/profile is correct, but $PS4 keeps its original value. I tried many different variable names, such as "PS3", "PS5", all of them work, except "PS4". I found such problem when we update our os from Red-hat 7.3 to Red-hat 7.4,this is a long time ago. Now, I know that on Red-Hat7.0, bash version 4.2.45(1)-release, no such problem; on Red-hat 7.5 bash version 4.2.46(2)-release, on Ubuntu 16.04 bash version 4.3.48(1)-release, both have this issue. I assume this issue occurs after version 4.2.46. PS4 is used by "set -x" to prefix tracing output, it is very useful for our work, but it doesn't work now, I'm confused. Thanks a lot. Thanks, Fan