我想执行以下shell命令
workon foo && python /path/to/bar.py --parm1 /path/p1 --parm2 /path/p2
我试过像这样运行它
def sout = new StringBuffer(), serr = new StringBuffer()
def proc = ["/bin/zsh","-c"," workon foo", "&&", "python", "/path/to/bar.py", "--parm1", "/path/p1", "--parm2", "/path/p2"].execute()
proc.consumeProcessOutput(sout, serr)
proc.waitForOrKill(1000)
println "out> $sout err> $serr"
但我一直收到错误:
out> err> zsh:1: command not found: workon
我可以从终端执行此命令
答案 0 :(得分:2)
正如@donkopotamus建议,workon
在调用zsh -c
时,zsh
可能不在您的路径中,也不会设置(通过环境初始化)。您可能需要一个"登录shell"这样做 - 但请注意,我不会使用或了解zsh -l -c COMMAND
:)
尝试运行zsh
。
此外,您使用-c
调用&&
的方式,它只能处理一个命令。其他所有内容都将被视为该命令的参数。
要使用proc
,您必须将此内容分配给["/bin/zsh","-lc", "workon foo && python /path/to/bar.py ..."]
:
-c
请注意@TargetApi(Build.VERSION_CODES.JELLY_BEAN)
public void PushNotification()
{
NotificationManager nm = (NotificationManager)context.getSystemService(NOTIFICATION_SERVICE);
Notification.Builder builder = new Notification.Builder(context);
Intent notificationIntent = new Intent(context, MainActivity.class);
PendingIntent contentIntent = PendingIntent.getActivity(context,0,notificationIntent,0);
//set
builder.setContentIntent(contentIntent);
builder.setSmallIcon(R.drawable.cal_icon);
builder.setContentText("Contents");
builder.setContentTitle("title");
builder.setAutoCancel(true);
builder.setDefaults(Notification.DEFAULT_ALL);
Notification notification = builder.build();
nm.notify((int)System.currentTimeMillis(),notification);
}
的参数是一个字符串。