delorie.com/archives/browse.cgi   search  
Mail Archives: cygwin/2004/10/04/23:56:59

Mailing-List: contact cygwin-help AT cygwin DOT com; run by ezmlm
List-Subscribe: <mailto:cygwin-subscribe AT cygwin DOT com>
List-Archive: <http://sourceware.org/ml/cygwin/>
List-Post: <mailto:cygwin AT cygwin DOT com>
List-Help: <mailto:cygwin-help AT cygwin DOT com>, <http://sourceware.org/ml/#faqs>
Sender: cygwin-owner AT cygwin DOT com
Mail-Followup-To: cygwin AT cygwin DOT com
Delivered-To: mailing list cygwin AT cygwin DOT com
Date: Tue, 5 Oct 2004 13:56:46 +1000 (EST)
From: luke DOT kendall AT cisra DOT canon DOT com DOT au
Subject: Shell script ignores $PATH?!
To: cygwin AT cygwin DOT com
MIME-Version: 1.0
Message-Id: <20041005035646.C44D285135@pessard.research.canon.com.au>

I have written a shell script to drive a Cygwin upgrade or install.

It checks that it's not being run from a locally-installed Cygwin.

Unfortunately, despite setting PATH to use only a network-installed
Cygwin (and not include /bin, /usr/bin etc.), the shell script still
somehow decides to invoke /usr/bin/sh.

Any idea why/how this happens?  I removed the "#!/bin/sh" from the
start of the script, and ran hash -r, thinking that may have been the
cause.  But echo $$ still reveals that it's really using my
local-installed Cygwin, not the network one mounted on L:.  You'll see
that the interactive shell is PID 3540, but since the /usr/bin/sh
script's parent PID is 3540, somehow it started a shell that wasn't in
$PATH, instead of one that was!

    Microsoft Windows XP [Version 5.1.2600]
    (C) Copyright 1985-2001 Microsoft Corp.

    D:\home\luke>set PATH=C:\WINDOWS\system32;C:\WINDOWS;l:\bin\cygwin\bin

    D:\home\luke>mount
    C:\cygwin\usr\X11R6\lib\X11\fonts on /usr/X11R6/lib/X11/fonts type system (binmode)
    C:\cygwin\bin on /usr/bin type system (textmode)
    C:\cygwin\lib on /usr/lib type system (textmode)
    C:\cygwin on / type system (textmode)
    d:\home on /home type system (textmode)
    c: on /cygdrive/c type user (textmode,noumount)
    d: on /cygdrive/d type user (textmode,noumount)
    l: on /cygdrive/l type user (textmode,noumount)
    p: on /cygdrive/p type user (textmode,noumount)
    u: on /cygdrive/u type user (textmode,noumount)
    w: on /cygdrive/w type user (textmode,noumount)
    x: on /cygdrive/x type user (textmode,noumount)
    y: on /cygdrive/y type user (textmode,noumount)
    z: on /cygdrive/z type user (textmode,noumount)

    D:\home\luke>bash
    bash-2.05b$ echo $PATH
    /cygdrive/c/WINDOWS/system32:/cygdrive/c/WINDOWS:/cygdrive/l/bin/cygwin/bin

    bash-2.05b$ echo $$
    3540

    bash-2.05b$ /cygdrive/x/cygnus/cisra/cygupgrade.sh latest
    The Cygwin mirror looks good

    PID is 3344, ps | grep ^[I ] *3344 gives:
	 3344    3540    3344       3152  con 11021 13:39:59 /usr/bin/sh


	  PID    PPID    PGID     WINPID  TTY  UID    STIME COMMAND
	 3752       1    3752       3752  con 11021   Sep 24 /usr/bin/rxvt
	 3768    3752    3768       3780    1 11021   Sep 24 /usr/bin/bash
	 2396       1    2396       2396  con 11021   Sep 24 /usr/bin/rxvt
    I    2428    2396    2428       2416    0 11021   Sep 24 /usr/bin/bash
    I    1996       1    1996       1996  con 11021   Oct  1 /cygdrive/l/bin/cygwin/bin/bash
	 1100    3768    1100       2164    1 11021 12:42:24 /usr/bin/vim
	 3540       1    3540       3540  con 11021 13:34:18 /cygdrive/l/bin/cygwin/bin/bash
	 3344    3540    3344       3152  con 11021 13:39:59 /usr/bin/sh
	 3852    3344    3344       2736  con 11021 13:40:00 /cygdrive/l/bin/cygwin/bin/ps
    SHELL is , PATH is /cygdrive/c/WINDOWS/system32:/cygdrive/c/WINDOWS:/cygdrive/l/bin/cygwin/bin

How do I stop the script from running commands that aren't in $PATH?

luke


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

- Raw text -


  webmaster     delorie software   privacy  
  Copyright © 2019   by DJ Delorie     Updated Jul 2019