【发布时间】:2009-09-23 15:48:13
【问题描述】:
我正在 Mac OS X Leopard 上的应用程序包中运行 jar 文件。我需要向 jar 中传递一个参数。该参数是调用应用程序包的文件的绝对路径。我在下面有我的简短 bash 脚本。我知道 $0 给出了应用程序包本身的绝对路径。
有谁知道如何在变量中存储我需要的路径(下面的 CALLERPATH)?如果另一个脚本调用它,列出的当前脚本可以正常工作(在 Dennis 的回复中查找调用者脚本),但当我双击“file.xyz”时,它的工作方式不同。
脚本 1
#!/bin/bash
echo $0
echo $_
echo $(dirname $0)
echo $(basename $0)
echo $PWD
echo "$@"
echo $PPID
echo "My PPID echo"
myPPID=$PPID echo $(ps -p $myPPID -o args=)
BASEDIR=`dirname "$0"`
echo "CallerPath Output 1"
callerpath="$(/bin/ps -p $PPID -o args=)"
echo -e "$callerpath\n"
echo "Caller Path Output 2"
callerpath="${callerpath#/bin/bash *}"
echo -e "$callerpath\n"
echo "Final Caller Path"
callerpath="${callerpath%/*}"
echo -e "$callerpath\n"
exec java \
-jar "$BASEDIR/../Resources/Java/myJar.jar" "$callerpath"
输出 1
9/25/09 3:54:42 PM [0x0-0xbb0bb].MyApp[1496] /Applications/appBundle.app/Contents/MacOS/myScript
9/25/09 3:54:42 PM [0x0-0xbb0bb].MyApp[1496] /Applications/appBundle.app/Contents/MacOS/myScript
9/25/09 3:54:42 PM [0x0-0xbb0bb].MyApp[1496] /Applications/appBundle.app/Contents/MacOS
9/25/09 3:54:42 PM [0x0-0xbb0bb].MyApp[1496] myScript
9/25/09 3:54:42 PM [0x0-0xbb0bb].MyApp[1496] /
9/25/09 3:54:42 PM [0x0-0xbb0bb].MyApp[1496] -psn_0_766139
9/25/09 3:54:42 PM [0x0-0xbb0bb].MyApp[1496] 63
9/25/09 3:54:42 PM [0x0-0xbb0bb].MyApp[1496] My PPID echo
9/25/09 3:54:42 PM [0x0-0xbb0bb].MyApp[1496] ps: Invalid process id: -o
9/25/09 3:54:42 PM [0x0-0xbb0bb].MyApp[1496] ps: illegal argument: args=
9/25/09 3:54:42 PM [0x0-0xbb0bb].MyApp[1496] usage: ps [-AaCcEefhjlMmrSTvwXx] [-O fmt | -o fmt] [-G gid[,gid...]]
9/25/09 3:54:42 PM [0x0-0xbb0bb].MyApp[1496] [-g grp[,grp...]] [-u [uid,uid...]]
9/25/09 3:54:42 PM [0x0-0xbb0bb].MyApp[1496] [-p pid[,pid...]] [-t tty[,tty...]] [-U user[,user...]]
9/25/09 3:54:42 PM [0x0-0xbb0bb].MyApp[1496] ps [-L]
9/25/09 3:54:42 PM [0x0-0xbb0bb].MyApp[1496] CallerPath Output 1
9/25/09 3:54:42 PM [0x0-0xbb0bb].MyApp[1496] Caller Path Output 2
9/25/09 3:54:42 PM [0x0-0xbb0bb].MyApp[1496] Final Caller Path
脚本 2
#!/bin/bash
echo $0
echo $_
echo $(dirname $0)
echo $(basename $0)
echo $PWD
echo "$@"
echo $PPID
echo "My PPID export"
export myPPID=$PPID
echo $(ps -p $myPPID -o args=)
BASEDIR=`dirname "$0"`
echo "CallerPath Output 1"
callerpath="$(/bin/ps -p $PPID -o args=)"
echo -e "$callerpath\n"
echo "Caller Path Output 2"
callerpath="${callerpath#/bin/bash *}"
echo -e "$callerpath\n"
echo "Final Caller Path"
callerpath="${callerpath%/*}"
echo -e "$callerpath\n"
exec java \
-jar "$BASEDIR/../Resources/Java/myJar.jar" "$callerpath"
输出 2
9/25/09 4:02:40 PM [0x0-0xc10c1].MyApp[1561] /Applications/appBundle.app/Contents/MacOS/myScript
9/25/09 4:02:40 PM [0x0-0xc10c1].MyApp[1561] /Applications/appBundle.app/Contents/MacOS/myScript
9/25/09 4:02:40 PM [0x0-0xc10c1].MyApp[1561] /Applications/appBundle.app/Contents/MacOS
9/25/09 4:02:40 PM [0x0-0xc10c1].MyApp[1561] myScript
9/25/09 4:02:40 PM [0x0-0xc10c1].MyApp[1561] /
9/25/09 4:02:40 PM [0x0-0xc10c1].MyApp[1561] -psn_0_790721
9/25/09 4:02:40 PM [0x0-0xc10c1].MyApp[1561] 63
9/25/09 4:02:40 PM [0x0-0xc10c1].MyApp[1561] My PPID export
9/25/09 4:02:40 PM [0x0-0xc10c1].MyApp[1561] CallerPath Output 1
9/25/09 4:02:40 PM [0x0-0xc10c1].MyApp[1561] Caller Path Output 2
9/25/09 4:02:40 PM [0x0-0xc10c1].MyApp[1561] Final Caller Path
【问题讨论】:
标签: bash path jar parameters