Bash shell extension ?

Andrew DeFaria
Fri Apr 12 14:40:00 GMT 2002

Andrew DeFaria wrote:

> Donald MacVicar wrote:
>>>> surely you could just have @="rxvt -ls -e bash -c \"cd '%1'; exec 
>>>> bash --login\"" and then all the startup scripts would be run 
>>>> properly? 
>>> Nope! Because --login runs /etc/profile and /etc/profile cd's to $HOME!
>> Realised that about 10 secs after I sent the mail. 
> I know how that goes! :-)
>> how about put the --login on the first bash - i.e. txvt -ls -e bash 
>> --login -c ......  Just tried that and it seems to wok.
> Perhaps. Actually I'm a big advocate of putting options in 
> ~/.Xdefaults to make the command line for things like rxvt a lot 
> shorter. I already have loginShell set to true there so the -ls is 
> irrelevent in my situation.
> Actually does anybody know how to make this run minimized by default? 
> I say that because there is that annoying, flashing window that 
> Windows apparenlty runs cmd in to execute the contents of the command 
> key here. My workaround for this, WRT shortcuts say on the desktop, is 
> to preceed this already long command with "cmd /c start /b..." but 
> then set the shortcut to run minimized. So instead of a large flashing 
> cmd window there's a momentary blip in the taskbar that is quickly 
> replaced with the rxvt entry. BTW the /c is equivalent to -c and 
> start's /b option says don't open a cmd window for this command.

Actual experiementation shows me that both are needed! you need --login 
on the first bash so that /etc/profile gets executed. The -c then 
executes putting you in the right directory. The "; exec bash" is needed 
so that the -c command doesn't complete. If it did then bash would exit 
and you'd just have a flicker on the screen. In this new exec'ed bash 
there has been no indication to bash that you want any start up scripts 
to be processed. Putting --login on the second exec'ed bash gets you 
back to the same problem since /etc/profile does a cd "$HOME". Yet 
without any startup scripts running your enviornment is less than ideal. 
So you need -rcfile ~/.bash_login on the second, exec'ed bash so run 
your rcfile.

To recap, for bare bones Windows window execution you need:

bash --login -c "cd '%1'; exec bash -rcfile ~/.bash_login"

For an rxvt window do:

rxvt -e bash --login -c "cd '%1'; exec bash -rcfile ~/.bash_login"

Unsubscribe info:
Bug reporting:

More information about the Cygwin mailing list