Issue 126: findPid on windows now matches on window title. fixed error where script exit quit the calling shell in windows

git-svn-id: http://jclouds.googlecode.com/svn/trunk@2354 3d8758e0-26b5-11de-8745-db77d3ebf521
This commit is contained in:
adrian.f.cole 2009-12-01 00:14:28 +00:00
parent e62fe3f6e4
commit 4b24b990be
10 changed files with 36 additions and 41 deletions

View File

@ -55,8 +55,7 @@ public class Call implements Statement {
public String render(OsFamily family) {
StringBuilder args = new StringBuilder();
for (String arg : this.args) {
args.append(String.format(" \"%s\"", Utils.replaceTokens(arg, ShellToken
.tokenValueMap(family))));
args.append(" ").append(Utils.replaceTokens(arg, ShellToken.tokenValueMap(family)));
}
StringBuilder call = new StringBuilder();
call.append(Utils.replaceTokens(OS_TO_CALL.get(family), ImmutableMap.of("function", function,

View File

@ -149,7 +149,7 @@ public enum ShellToken {
case END_SCRIPT:
switch (family) {
case WINDOWS:
return "exit 0\r\n";
return "exit /b 0\r\n";
case UNIX:
return "exit 0\n";
}
@ -170,7 +170,7 @@ public enum ShellToken {
case EXIT:
switch (family) {
case WINDOWS:
return "exit";
return "exit /b";
case UNIX:
return "exit";
}

View File

@ -215,8 +215,8 @@ public class Utils {
}
public static final Map<OsFamily, String> OS_TO_ZERO_PATH = ImmutableMap.of(OsFamily.WINDOWS,
"set PATH=c:\\windows\\;C:\\windows\\system32\r\n", OsFamily.UNIX,
"export PATH=/usr/ucb/bin:/bin:/usr/bin:/usr/sbin\n");
"set PATH=c:\\windows\\;C:\\windows\\system32;c:\\windows\\system32\\wbem\r\n",
OsFamily.UNIX, "export PATH=/usr/ucb/bin:/bin:/usr/bin:/usr/sbin\n");
/**
* @return line used to zero out the path of the script such that basic commands such as unix ps

View File

@ -1,3 +1,3 @@
:abort
echo aborting: %EXCEPTION%
exit 1
exit /b 1

View File

@ -1,16 +1,14 @@
:findPid
set FOUND_PID=
SETLOCAL
set _pid=
set _expression=%1
shift
set FIND_PROCESS=wmic process where (CommandLine like "%_expression%%%") get ProcessId
for /f "usebackq skip=1" %%a in (`cmd /c "%FIND_PROCESS% 2>NUL"`) do (
if not defined _proc (
set _pid=%%a
goto :done
set FIND_PROCESS=TASKLIST /FI "WINDOWTITLE eq %_expression%" /NH
FOR /F "usebackq tokens=2 delims= " %%A IN (`cmd /c "%FIND_PROCESS% 2>NUL"`) DO (
SET FOUND_PID=%%A
)
)
:done
ENDLOCAL&SET FOUND_PID=%_pid%
if defined FOUND_PID (
exit /b 0
) else (
set EXCEPTION=%_expression% not found
exit /b 1
)

View File

@ -45,12 +45,12 @@ public class CallTest {
public void testCallArgsUNIX() {
Call call = new Call("help", "me", "rhonda");
assertEquals(call.render(OsFamily.UNIX), "help \"me\" \"rhonda\" || return 1\n");
assertEquals(call.render(OsFamily.UNIX), "help me rhonda || return 1\n");
}
public void testCallArgsWINDOWS() {
Call call = new Call("help", "me", "rhonda");
assertEquals(call.render(OsFamily.WINDOWS),
"call :help \"me\" \"rhonda\"\r\nif errorlevel 1 goto abort\r\n");
"call :help me rhonda\r\nif errorlevel 1 goto abort\r\n");
}
}

View File

@ -55,11 +55,11 @@ public class ShellTokenTest {
public void testTokenValueMapWindows() {
Map<String, String> expected = new ImmutableMap.Builder<String, String>().put("fs", "\\")
.put("ps", ";").put("lf", "\r\n").put("sh", "cmd").put("source", "@call").put("rem",
"@rem").put("args", "%*").put("varl", "%").put("exit", "exit").put("varr",
"@rem").put("args", "%*").put("varl", "%").put("exit", "exit /b").put("varr",
"%").put("libraryPathVariable", "PATH").put("return", "exit /b").put("vq",
"").put("beginFunctions", "GOTO FUNCTION_END\r\n").put("endFunctions",
":FUNCTION_END\r\n").put("beginScript", "@echo off\r\n").put("endScript",
"exit 0\r\n").put("fncl", ":").put("fncr", "\r\n").put("fnce",
"exit /b 0\r\n").put("fncl", ":").put("fncr", "\r\n").put("fnce",
" exit /b 0\r\n").put("export", "set").build();
assertEquals(ShellToken.tokenValueMap(OsFamily.WINDOWS), expected);

View File

@ -23,6 +23,6 @@ function findPid {
}
}
export PATH=/usr/ucb/bin:/bin:/usr/bin:/usr/sbin
findPid "$@" || exit 1
findPid $@ || exit 1
echo $FOUND_PID
exit 0

View File

@ -5,26 +5,24 @@ set PATH=
GOTO FUNCTION_END
:abort
echo aborting: %EXCEPTION%
exit 1
exit /b 1
:findPid
set FOUND_PID=
SETLOCAL
set _pid=
set _expression=%1
shift
set FIND_PROCESS=wmic process where (CommandLine like "%_expression%%%") get ProcessId
for /f "usebackq skip=1" %%a in (`cmd /c "%FIND_PROCESS% 2>NUL"`) do (
if not defined _proc (
set _pid=%%a
goto :done
set FIND_PROCESS=TASKLIST /FI "WINDOWTITLE eq %_expression%" /NH
FOR /F "usebackq tokens=2 delims= " %%A IN (`cmd /c "%FIND_PROCESS% 2>NUL"`) DO (
SET FOUND_PID=%%A
)
)
:done
ENDLOCAL&SET FOUND_PID=%_pid%
if defined FOUND_PID (
exit /b 0
) else (
set EXCEPTION=%_expression% not found
exit /b 1
)
:FUNCTION_END
set PATH=c:\windows\;C:\windows\system32
call :findPid "%*"
set PATH=c:\windows\;C:\windows\system32;c:\windows\system32\wbem
call :findPid %*
if errorlevel 1 goto abort
echo %FOUND_PID%
exit 0
exit /b 0

View File

@ -5,12 +5,12 @@ set PATH=
GOTO FUNCTION_END
:abort
echo aborting: %EXCEPTION%
exit 1
exit /b 1
:default
set JAVA_HOME=/apps/jdk1.6
exit /b 0
:FUNCTION_END
set PATH=c:\windows\;C:\windows\system32
set PATH=c:\windows\;C:\windows\system32;c:\windows\system32\wbem
goto CASE%1
:CASE_start
echo started
@ -19,4 +19,4 @@ goto CASE%1
echo stopped
GOTO END_SWITCH
:END_SWITCH
exit 0
exit /b 0