This is the mail archive of the cygwin mailing list for the Cygwin project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: alias appears to not work inside a called bash script


On 22 August 2017 at 12:45, Eliot Moss <moss@cs.umass.edu> wrote:
> On 8/22/2017 11:18 AM, Stephen John Smoogen wrote:
>>
>> On 22 August 2017 at 10:47, Eliot Moss <moss@cs.umass.edu> wrote:
>>>
>>> On 8/22/2017 10:31 AM, Stephen John Smoogen wrote:
>
>
>>> It's a *bash* default - it has nothing to do with Cygwin as distinct
>>> from other bash installations.  If you had a different experience
>>> elsewhere, it could be that the default was overridden in some system
>>> wide bashrc file - but that strikes me as unlikely.  I suspect that
>>> this is done as a security measure, to prevent an alias from introducing
>>> a surprise.
>>>
>>
>> I checked on CentOS and there is no shopt option set in any of the
>> /etc/ files. It must be a compiled in default of some sort as EL6 and
>> EL7 both work without an explicit `shopt -s expand_aliases`. I then
>> tried on an Ubuntu 16.04 system and it works without the `shopt -s
>> expand_aliases` also.
>>
>> I didn't have access to anything else at the moment so I can't say
>> which other systems might actually follow the default other than
>> Cygwin at the moment.
>
>
> Hmmm ... One of my servers runs EL7 and it works there exactly as under
> Cygwin on my laptop.  I wonder: Is there an nawk installed somewhere
> on your path on these CentOS and EL* systems?  Put another way, if you
> put 'type -a nawk' in your script *before* the alias lines, what output
> do you get?  And what about shopt?  I added these lines before the alias
> lines:
>
> shopt | grep expand_aliases
> type -a nawk
> type -t nawk
>
> Regards - Eliot
>
>
> --
> Problem reports:       http://cygwin.com/problems.html
> FAQ:                   http://cygwin.com/faq/
> Documentation:         http://cygwin.com/docs.html
> Unsubscribe info:      http://cygwin.com/ml/#unsubscribe-simple
>

OK I figured it out. I didn't copy the original script correctly.

[ssmoogen@el-7 ~]$ ./x.sh foobar
Before alias
expand_aliases on
./x.sh: line 4: type: nawk: not found
After alias
expand_aliases on
nawk is aliased to `/usr/bin/awk'
alias
Hello World!
[ssmoogen@el-7 ~]$ cat x.sh
#!/bin/sh
echo "Before alias"
shopt | grep expand_aliases
type -a nawk
type -t nawk
alias nawk='/usr/bin/awk'
echo "After alias"
shopt | grep expand_aliases
type -a nawk
type -t nawk
nawk '{print $0}' $*

Change that #!/bin/sh to #!/bin/bash

[ssmoogen@el-7 ~]$ ./x.sh foobar
Before alias
expand_aliases off
./x.sh: line 4: type: nawk: not found
After alias
expand_aliases off
./x.sh: line 9: type: nawk: not found
./x.sh: line 11: nawk: command not found

So when you use bourne sh compatibility aliases get expanded. When you
don't.. they do as the reporter says.

-- 
Stephen J Smoogen.

--
Problem reports:       http://cygwin.com/problems.html
FAQ:                   http://cygwin.com/faq/
Documentation:         http://cygwin.com/docs.html
Unsubscribe info:      http://cygwin.com/ml/#unsubscribe-simple


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]