我想使用execve()运行一个脚本。在下面的代码中,我在c++代码中打印环境变量,然后将这些变量的输出传递给一个名为"usrscript“的脚本,以便在那里打印它们,但是execve()没有执行该脚本。`
#include <unistd.h>
#include <sys/types.h>
#include <sys/wait.h>
#include <stdlib.h>
#include <errno.h>
#include <string.h>
#include <iostream>
#include <stdio.h>
using namespace std;
int main(int argc, char *argv[], char * envp[]){
char arg1[100]={};
char arg2[100]={'\0'};
char arg3[100]={};
for (int i=0 ; envp[i] != NULL; i++){
if('U'==envp[i][0] && 'S'==envp[i][1] && 'E'==envp[i][2] && 'R'==envp[i][3] && '='==envp[i][4]){
for(int j=5 ;envp[i][j] != '\0';j++ ){
arg1[j-5] = envp[i][j];
}
cout<<arg1<<endl;
}
if('P'==envp[i][0] && 'A'==envp[i][1] && 'T'==envp[i][2] && 'H'==envp[i][3]){
for(int j=5 ;envp[i][j] != '\0';j++ ){
arg2[j-5] = envp[i][j];
}
cout<<arg2<<endl;
}
if('T'==envp[i][0] && 'E'==envp[i][1] && 'R'==envp[i][2] && 'M'==envp[i][3]){
for(int j=5 ;envp[i][j] != '\0';j++ ){
arg3[j-5] = envp[i][j];
}
cout<<arg3<<endl;
}
}
char cmd[]="./usrscript.sh";
char scr[] ="usrscript";
char os[]="OS2022=5ma32zw";
char *const vectorArg[] = {scr,arg1,arg2,arg3,NULL};
char *const vectorEnv[]= {os,NULL};
execve(cmd,vectorArg,vectorEnv);
cout<<"Failed\n";
return 0;}传递给我的脚本是:
#!usr/bin/bash
echo "hello"
for var in "$@"
do
echo "$var"
done
echo $OS2022
echo $TERM
echo $PATH
echo $USER我试图查看是否将不正确的值传递给execve(),但是找不到任何东西。任何建议都会有帮助。
发布于 2022-03-20 07:35:47
通过在脚本中用#!usr/bin/bash替换#!/bin/bash解决了这个问题。
https://stackoverflow.com/questions/71529364
复制相似问题