标签: exec

如何从 Ant 'exec' 任务导出环境变量?

我在 WinXp 下使用 Ant 构建 MSVisual c++ 项目。

要访问独立于计算机的“devenv.com”,我想使用 vsvars32.bat 脚本。不幸的是,环境变量似乎只在“exec”范围内定义。

例子:

<exec executable='"${env.VS90COMNTOOLS}vsvars32.bat/>
<echo message="${DevEnvDir}" />
<echo message="${env.DevEnvDir}" />
<property environment="env2"/>
<echo message="${env2.DevEnvDir}" />
Run Code Online (Sandbox Code Playgroud)

我从来没有得到预期的结果。

如何使用“vsvars32.bat”脚本并访问其环境。变量?有更好的方法来实现这一目标吗?

ant exec environment-variables devenv

2
推荐指数
1
解决办法
4405
查看次数

PHP:exec(svn commit)不返回任何错误也不工作

目前我正在用 php 将文件写到一个目录中,我添加该目录(工作正常),然后当我尝试执行 svn commit 时,它不起作用也不返回任何类型的错误代码。有人对此有任何想法吗?

$tmp = exec('cd '.$this->build_locations[$this->type].'; svn commit --username user --password pw; ls', $output);
Run Code Online (Sandbox Code Playgroud)

我执行 cd 到目录(这里的 ls 工作正常吗),之后我执行 ls 来确认它仍然在目录中。

我也尝试过:

svn help
Run Code Online (Sandbox Code Playgroud)

它会很好地返回所有命令(所以我知道这不是找不到 svn 命令的问题。

我已经对文件 777 进行了 chmod 操作以确认它可以执行。

编辑后的代码:

    $output = array();
    $tmp1 = exec("cd ".$this->build_locations[$this->type].";");
    $tmp = exec("svn commit ".$this->build_locations[$this->type].$this->app_id." --username user --password password -m 'test' --non-interactive --trust-server-cert --quiet 2>&1;", $output, $error);
    if($error){
        echo('<pre>');
        print_r($output);
        echo('</pre>');
    }
    exit;
Run Code Online (Sandbox Code Playgroud)

这会产生:

Array

    [0] => could not lookup DNS configuration info service: (ipc/send) invalid …
Run Code Online (Sandbox Code Playgroud)

php svn exec

2
推荐指数
1
解决办法
5446
查看次数

从两个文件读取变量并以第三个文件的模式输出

我有 2 个如下文件:

文件1:

a1,b1,c1,d1,e1,f1,g1,h1
a2,b2,c2,d2,e2,f2,g2,h2
a3,b3,c3,d3,e3,f3,g3,h3
a4,b4,c4,d4,e4,f4,g4,h4
Run Code Online (Sandbox Code Playgroud)

文件2:

x1,y1,z1
x2,y2,z2
x3,y3,z3
x4,y4,z4
Run Code Online (Sandbox Code Playgroud)

我想同时读取两者并以如下模式输出变量:

a1,b1,c1,d1,x1,e1,f1,y1,g1,z1,h1
a2,b2,c2,d2,x2,e2,f2,y2,g2,z2,h2
a3,b3,c3,d3,x3,e3,f3,y3,g3,z3,h3
a4,b4,c4,d4,x4,e4,f4,y4,g4,z4,h4
Run Code Online (Sandbox Code Playgroud)

好消息 - 我已经成功实现了!

坏消息 - 太多的数组和 while 循环(太多的计算!)。我正在寻找更简单的东西,因为脚本必须读取大量数据(4k 行和 1M 字)。

限制 - BASH shell(可能不是限制!)

这就是我所做的

exec 5<file1 # Open file into FD 5
exec 6<file2 # Open file into FD 6

while IFS=$"," read -r line1 <&5
IFS=$"," read -r line2 <&6
do
    array1=( `echo $line1` )
    array2=( `echo $line2` )
    array3=("${array1[@]}","${array2[@]}")
    echo ${array3[@]} >> tmpline
done
while IFS="," read var1 …
Run Code Online (Sandbox Code Playgroud)

arrays bash shell exec while-loop

2
推荐指数
1
解决办法
341
查看次数

为什么 ls 不能与 execvp 一起使用?

我有一个作业要求我编写一个迷你 shell - 它将获取要执行的命令,执行它,然后等待更多命令。

当我将命令传递给这个迷你 shell 时,ls .它会打印当前目录的竞赛。当我传递给它时,ls它什么也没打印。为什么?

这是我的代码:

#include <stdio.h>
#include <sys/types.h>
#include <sys/wait.h>
#include <string.h>
#include <unistd.h>
#include <assert.h>
#include <stdlib.h>
#include <stdbool.h>
#define MAX_CMD_SIZE 40
char** parse(char*);//will parse the arguments for the execv/excevp commands.

int main(int argc, char** argv)
{
    bool debug = false;
    assert(argc <= 2);
    if (argc == 2)
    {
        //check for string -debug
        debug = true; 
    } 
    if (debug)
        printf("INFO: Father started PID[%d]\n", getpid());
    char *command = malloc(MAX_CMD_SIZE);
    while(true)
    { …
Run Code Online (Sandbox Code Playgroud)

c linux exec

2
推荐指数
1
解决办法
4093
查看次数

javascript正则表达式如何处理新行

为什么下面的代码只给我“abc”而不是“abc\nef”?正则表达式如何处理新行?谢谢。

    var input = "abc\nef",
    pattern = /.*/g,
    result = pattern.exec(input),
    i = 0;

    for (i = 0; i < result.length; i++) {
        console.log(result[i]);
    }
Run Code Online (Sandbox Code Playgroud)

javascript regex global exec

2
推荐指数
1
解决办法
105
查看次数

Go:在 exec.Command 中使用字符串时出现奇怪的结果

我有一个处理 Linux CLI 命令及其参数的 Go 函数:

func cmd(cmd string, args ...string) ([]byte, error) {
    path, err := exec.Command("/usr/bin/which", cmd).Output()
    if err != nil {
        return []byte(""), err
    }
    response, err := exec.Command(string(path), args...).Output()
    if err != nil {
        response = []byte("Unknown")
    }
    return response, err
}
Run Code Online (Sandbox Code Playgroud)

由以下内容调用:

func main() {
    uname, err := cmd("uname", "-a")
    fmt.Println(string(uname))
}
Run Code Online (Sandbox Code Playgroud)

“which”命令返回二进制文件的正确路径,但是当它尝试使用动态路径运行第二个 exec 命令时,返回始终为:

fork/exec /usr/bin/uname
: no such file or directory
exit status 1
Run Code Online (Sandbox Code Playgroud)

然而,如果第二个 exec 命令是硬编码的,则一切都会按预期工作并打印 uname:

response, err := exec.Command("/usr/bin/uname", args...).Output() …
Run Code Online (Sandbox Code Playgroud)

linux string exec go

2
推荐指数
1
解决办法
1560
查看次数

sudo: PERM_ROOT: setresuid(0, -1, -1): 不允许操作

所以问题是错误出现在 apache.err 中。

我可以在 shell 中以用户身份执行。

root@ubuntu:~# su www-data
www-data@ubuntu:/root$ sudo /usr/local/bin/metronomectl restart
Stopped
Started
www-data@ubuntu:/root$
Run Code Online (Sandbox Code Playgroud)

但是当我通过 php 尝试相同的命令时

exec('sudo /usr/local/bin/metronomectl restart');
Run Code Online (Sandbox Code Playgroud)

我收到错误

sudo: PERM_ROOT: setresuid(0, -1, -1): Operation not permitted
Run Code Online (Sandbox Code Playgroud)

用户 www-data 在 sudoers 中。

我已经无计可施了...任何帮助都是值得赞赏的。

附言。请询问您是否需要任何额外信息。

编辑:

root@ubuntu:~# uname -a
Linux ubuntu 3.13.0-24-generic #46-Ubuntu SMP Thu Apr 10 19:11:08 UTC 2014 x86_64 x86_64 x86_64 GNU/Linux
root@ubuntu:~#
Run Code Online (Sandbox Code Playgroud)

须藤线:

www-data ALL= NOPASSWD: /usr/local/bin/metronomectl
Run Code Online (Sandbox Code Playgroud)

php apache sudo exec

2
推荐指数
1
解决办法
5101
查看次数

execl的返回值

我正在运行 execl 函数来通过我的代码编译程序。我想检查一下编译是否正确。所以我写了b = execl("usr/bin/gcc","cc",path,NULL);然后检查了if( b==-1)。但即使编译中有错误,它也没有进入 if 语句。有什么想法吗?谢谢你!

int b=0;
if ((pid1 = fork())<0)
    perror("Error forking");
else {
    if(pid1==0)
        b= execl("/usr/bin/gcc","cc",path,NULL);
    else wait(&status);
}
if(b==-1)
    printf("\n--------\n");
Run Code Online (Sandbox Code Playgroud)

c linux gcc exec

2
推荐指数
1
解决办法
2万
查看次数

PHP 将带撇号的字符串传递给 shell_exec

I\xe2\x80\x99m 尝试通过 PHP 将字符串(从 PDO 查询提取到 MYSQL DB)传递shell_exec到 *nix 程序,在本例中为xtide。

\n\n

一切正常,直到我传递一个包含撇号的字符串。

\n\n

这适用于 OSX 上的终端:

\n\n
house@New-MacBook-Pro:~$ tide -l "Nomans Land, Martha\'s Vineyard, Massachusetts"\n
Run Code Online (Sandbox Code Playgroud)\n\n

但是完全相同的字符串,从 PDO 查询到 MYSQL DB,并作为变量传递到 shell_exec 中,总是会失败。我如何排列单引号/双引号似乎并不重要。

\n\n

运行此命令会添加反斜杠,但仍然失败:

\n\n
$tideLocation = mysql_real_escape_string($tideLocation);\n
Run Code Online (Sandbox Code Playgroud)\n\n

输出:

\n\n
Nomans Land, Martha\\\xe2\x80\x99s Vineyard, Massachusetts\n
Run Code Online (Sandbox Code Playgroud)\n\n

失败:

\n\n
$output1 = shell_exec("/opt/local/bin/tide -l \'Nomans Land, Martha\'s Vineyard, Massachusetts\'");\n\n$output1 = shell_exec("/opt/local/bin/tide -l \'$tideLocation\'");\n
Run Code Online (Sandbox Code Playgroud)\n\n

当在以下位置手动设置时,这是有效的shell_exec:

\n\n
$output1 = shell_exec("/opt/local/bin/tide -l \'Nomans Land, Martha\\\'s Vineyard, …
Run Code Online (Sandbox Code Playgroud)

php exec shell-exec

2
推荐指数
1
解决办法
1380
查看次数

我在使用 python 3 运行 os.execl() 时遇到问题

import os
import sys

pid = os.fork()
print ("second test")
if pid == 0:
    print ("this is the child")
    print ("I'm going to exec another program now")
    os.execl("python", "test.py", * sys.argv)
else:
    print ("the child is pid %d" % pid)
    os.wait()
Run Code Online (Sandbox Code Playgroud)

我到处查看示例,但对于我的生活,我根本无法理解。我认为这会起作用,但我收到此错误:

Traceback (most recent call last):
  File "main.py", line 9, in <module>
    os.execl("python", "test.py", * sys.argv)
  File "/usr/local/lib/python3.8/os.py", line 534, in execl
    execv(file, args)
FileNotFoundError: [Errno 2] No such file or directory
Run Code Online (Sandbox Code Playgroud)

python exec python-3.x

2
推荐指数
1
解决办法
203
查看次数

标签 统计

exec ×10

linux ×3

php ×3

c ×2

ant ×1

apache ×1

arrays ×1

bash ×1

devenv ×1

environment-variables ×1

gcc ×1

global ×1

go ×1

javascript ×1

python ×1

python-3.x ×1

regex ×1

shell ×1

shell-exec ×1

string ×1

sudo ×1

svn ×1

while-loop ×1