我在 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”脚本并访问其环境。变量?有更好的方法来实现这一目标吗?
目前我正在用 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) 我有 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) 我有一个作业要求我编写一个迷你 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) 为什么下面的代码只给我“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) 我有一个处理 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) 所以问题是错误出现在 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) 我正在运行 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) I\xe2\x80\x99m 尝试通过 PHP 将字符串(从 PDO 查询提取到 MYSQL DB)传递shell_exec到 *nix 程序,在本例中为xtide。
一切正常,直到我传递一个包含撇号的字符串。
\n\n这适用于 OSX 上的终端:
\n\nhouse@New-MacBook-Pro:~$ tide -l "Nomans Land, Martha\'s Vineyard, Massachusetts"\nRun Code Online (Sandbox Code Playgroud)\n\n但是完全相同的字符串,从 PDO 查询到 MYSQL DB,并作为变量传递到 shell_exec 中,总是会失败。我如何排列单引号/双引号似乎并不重要。
\n\n运行此命令会添加反斜杠,但仍然失败:
\n\n$tideLocation = mysql_real_escape_string($tideLocation);\nRun Code Online (Sandbox Code Playgroud)\n\n输出:
\n\nNomans Land, Martha\\\xe2\x80\x99s Vineyard, Massachusetts\nRun 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\'");\nRun Code Online (Sandbox Code Playgroud)\n\n当在以下位置手动设置时,这是有效的shell_exec:
$output1 = shell_exec("/opt/local/bin/tide -l \'Nomans Land, Martha\\\'s Vineyard, …Run Code Online (Sandbox Code Playgroud) 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)