From: Kevin M. <kev...@us...> - 2004-03-23 23:17:46
|
Hi, can somebody explain how msys.bat works exactly? Is there some dependency which requires that it be run from the msys\1.0 directory? I was wanting to make a small change in my msys.bat so that it could be run from any directory, instead of having to run it from the installation directory (in my case D:\msys\1.0)...but this change seems to break something... My change was to modify: if EXIST rxvt.exe goto startrxvt if EXIST sh.exe goto startsh to this: if EXIST %~dp0bin\rxvt.exe goto startrxvt if EXIST %~dp0bin\sh.exe goto startsh With this change, running msys.bat from any directory seems to work. The problem I have is that a getopt.exe that was built from cygutils-1.2.0 seems to either work or not work depending on: 1) If I open a command prompt, change directory to D:\msys\1.0 and run msys.bat and then run "getopt --help", I get the help output from getopt. 2) If I open a command prompt and run msys.bat from any location other than D:\msys\1.0 and then run "getopt --help", I get: getopt: missing optstring argument Try `getopt --help' for more information. Any ideas on what is happening? thanks, Kevin |
From: Earnie B. <ea...@us...> - 2004-03-28 17:38:26
|
Kevin Mack wrote: > if EXIST %~dp0bin\rxvt.exe goto startrxvt > if EXIST %~dp0bin\sh.exe goto startsh This is great stuff. Does it happen to be valid syntax for Win98? Earnie -- http://www.mingw.org http://sourceforge.net/projects/mingw https://sourceforge.net/donate/index.php?user_id=15438 |
From: Greg M. <la...@ms...> - 2004-03-28 23:41:24
|
On Sun, 28 Mar 2004, Earnie Boyd wrote: > Kevin Mack wrote: > > > if EXIST %~dp0bin\rxvt.exe goto startrxvt > > if EXIST %~dp0bin\sh.exe goto startsh > > This is great stuff. Does it happen to be valid syntax for Win98? Here is an experiment on Win98. CSHELL PIF 967 03-25-04 22:46 Cshell.pif SUBVER~1 LNK 479 03-16-04 15:55 Subversion Documentation.lnk 11 file(s) 34,681 bytes 3 dir(s) 19,501.20 MB free C:\WINDOWS\Desktop>if EXIST Cshell.pif echo 1 1 C:\WINDOWS\Desktop>if EXIST Subversion Documentation.lnk echo 1 C:\WINDOWS\Desktop>if EXIST SUBVER~1.LNK ECHO 1 1 C:\WINDOWS\Desktop>if EXIST "SUBVERSION DOCUMENTATION.LNK" ECHO 1 1 -- Greg Matheson, Taiwan |
From: Earnie B. <ea...@us...> - 2004-03-29 01:38:16
|
Greg Matheson wrote: >On Sun, 28 Mar 2004, Earnie Boyd wrote: > > > >>Kevin Mack wrote: >> >> >> >>>if EXIST %~dp0bin\rxvt.exe goto startrxvt >>>if EXIST %~dp0bin\sh.exe goto startsh >>> >>> >>This is great stuff. Does it happen to be valid syntax for Win98? >> >> > >Here is an experiment on Win98. > > > Your experiment isn't what I asked to be proved. The %~dp0 in cmd.exe is expanded to the drive and directory that contains the script file. <file name="earnie.bat"> echo %~dp0 </file> Then execute earnie.bat and tell me the result. Earnie -- http://www.mingw.org http://sourceforge.net/projects/mingw https://sourceforge.net/donate/index.php?user_id=15438 |
From: Greg M. <la...@ms...> - 2004-03-29 02:07:47
|
On Sun, 28 Mar 2004, Earnie Boyd wrote: > <file name="earnie.bat"> > echo %~dp0 > </file> > > Then execute earnie.bat and tell me the result. C:\WINDOWS\Desktop>more earnie.bat echo %~dp0 C:\WINDOWS\Desktop>earnie C:\WINDOWS\Desktop>echo ~dp0 ~dp0 C:\WINDOWS\Desktop> C:\WINDOWS\Desktop> |
From: Benjamin R. <Ben...@ep...> - 2004-03-29 12:16:45
|
Hi Earnie, > Kevin Mack wrote: >> if EXIST %~dp0bin\rxvt.exe goto startrxvt >> if EXIST %~dp0bin\sh.exe goto startsh Earnie Boyd <ea...@us...> writes: > This is great stuff. Does it happen to be valid syntax for Win98? No. But I have use this syntax in the past and this works here on W98 and on W2K: if EXIST %0\..\bin\rxvt.exe goto startrxvt if EXIST %0\..\bin\sh.exe goto startsh benny |
From: Greg M. <la...@ms...> - 2004-03-29 13:30:21
|
On Mon, 29 Mar 2004, Benjamin Riefenstahl wrote: > if EXIST %0\..\bin\rxvt.exe goto startrxvt > if EXIST %0\..\bin\sh.exe goto startsh C:\s\etc>if EXIST %0\..\bin\sh.exe echo 1 C:\s\etc>dir ..\bin\sh.exe Volume in drive C is WIN98 Volume Serial Number is 0B2D-16D9 Directory of C:\s\bin SH EXE 476,672 03-16-04 13:32 sh.exe 1 file(s) 476,672 bytes 0 dir(s) 19,363.94 MB free C:\s\etc>if EXIST %0\..\bin\sh.exe echo 1 C:\s\etc>cd .. C:\s>if EXIST %0\..\bin\sh.exe echo 1 1 C:\s>if EXIST .\bin\sh.exe echo 1 1 So, %0\.. equals .\ ? |
From: Benjamin R. <Ben...@ep...> - 2004-03-29 14:35:45
|
Hi Greg, Greg Matheson <la...@ms...> writes: > C:\s\etc>if EXIST %0\..\bin\sh.exe echo 1 > > C:\s\etc>[...] Is this from a batch file? Outside a batch file, "%0" isn't valid, so "%0" is used literally without substitution. > So, %0\.. equals .\ ? It means "pretend you had a directory '%0' and than you go up one level". It makes more sense in a batch files where "%0" is replaced with the batch file name itself as called on the command line, so "%0\.." can expand to "c:\some-directory\mybatch.bat\.." which is interpreted as "c:\some-directory". The trick is that Windows doesn't first checking that there is a directory "c:\some-directory\mybatch.bat" before resolving the ".." part. The snag is - I had forgot to mention it before, because I had forgotten myself - you actually have to call that batch as "c:\some-directory\mybatch param param". I.e. while "%~dp0" will calculate the path of the batch file for you, even when "c:\some-directory" is in your PATH and when you just say "mybatch param param", OTOH the syntax "%0\.." doesn't do that, so for a call through the PATH it will not work, because "mybatch\.." *is* indeed actually just a complicated way of saying ".". If I needed to, I was usually using aliases or simple wrapper batches to circumvent that problem. benny |
From: Kevin M. <kev...@us...> - 2004-03-29 14:23:29
|
Hi Earnie, not sure if its valid for Win98 or not...but I've found %~dp0 and %~n0 in windows batch files to be quite handy Kevin -- Earnie Boyd wrote: > Kevin Mack wrote: > >> if EXIST %~dp0bin\rxvt.exe goto startrxvt >> if EXIST %~dp0bin\sh.exe goto startsh > > > This is great stuff. Does it happen to be valid syntax for Win98? > > Earnie > |
From: Greg M. <la...@ms...> - 2004-03-30 00:12:28
|
On Mon, 29 Mar 2004, Benjamin Riefenstahl wrote: > > So, %0\.. equals .\ ? I just realized it is a correspondent to the Unix positional parameter, $0. > It means "pretend you had a directory '%0' and than you go up one > level". It makes more sense in a batch files where "%0" is replaced > with the batch file name itself as called on the command line, so > "%0\.." can expand to "c:\some-directory\mybatch.bat\.." which is > interpreted as "c:\some-directory". The trick is that Windows doesn't > first checking that there is a directory > "c:\some-directory\mybatch.bat" before resolving the ".." part. Although that directory would have to exist for the script to be executed. > The snag is - I had forgot to mention it before, because I had > forgotten myself - you actually have to call that batch as > "c:\some-directory\mybatch param param". I.e. while "%~dp0" will > calculate the path of the batch file for you, even when > "c:\some-directory" is in your PATH and when you just say "mybatch > param param", OTOH the syntax "%0\.." doesn't do that, so for a call > through the PATH it will not work, because "mybatch\.." *is* indeed > actually just a complicated way of saying ".". C:\s\home\greg>earnie.bat Bad command or file name C:\s\home\greg>move c:\s\bin\earnie.bat c:\windows\ C:\S\BIN\earnie.bat => C:\WINDOWS\earnie.bat [ok] earnie.bat is if EXIST %0\..\..\..\bin\sh.exe echo 1 /c/windows/earnie.bat (END) C:\s\home\greg>earnie.bat C:\s\home\greg>if EXIST earnie.bat\..\..\..\bin\sh.exe echo 1 1 C:\s\home\greg>cd ..\.. C:\s>earnie.bat C:\s>if EXIST earnie.bat\..\..\..\bin\sh.exe echo 1 C:\s>move c:\windows\earnie.bat c:\s\bin\ C:\WINDOWS\earnie.bat => C:\S\BIN\earnie.bat [ok] C:\s>c:\s\bin\earnie.bat C:\s>if EXIST c:\s\bin\earnie.bat\..\..\..\bin\sh.exe echo 1 C:\s> I think I see. -- Greg Matheson, Taiwan |
From: Benjamin R. <Ben...@ep...> - 2004-03-30 10:55:30
|
Hi Greg, > On Mon, 29 Mar 2004, Benjamin Riefenstahl wrote: >> The trick is that Windows doesn't first checking that there is a >> directory "c:\some-directory\mybatch.bat" before resolving the ".." >> part. Greg Matheson <la...@ms...> writes: > Although that directory would have to exist for the script to be > executed. Of course "c:\some-directory" will exist ;-). But "c:\some-directory\mybatch.bat" isn't a directory, even though the syntax "c:\some-directory\mybatch.bat\.." does imply that. Windows or the shell resolves the ".." before even hitting the disk. benny |