[英]Can't define variables when calling "/usr/bin/env bash" with execve()
我想執行/usr/bin/env
並打印出a=11
和b=22
。 目前,我有:
#include <unistd.h>
void main() {
char *name[3];
name[0]="/usr/bin/env";
name[1]="bash";
name[2]=NULL;
execve(name[0], name, NULL);
}
我可以完美地運行它,因為它打開了 bash shell。
但是,我正在嘗試定義和打印a=11
和b=22
。 當試圖定義a=11
時,我在做:
#include <unistd.h>
void main() {
char *name[4];
name[0]="/usr/bin/env";
name[1]="bash";
name[2]="a=11";
name[3]=NULL;
execve(name[0], name, NULL);
}
它返回此錯誤:
bash: a=11: No such file or directory
我究竟做錯了什么?
bash
的第一個非選項參數應該是要執行的腳本的名稱。
要使用bash
執行命令,您可以使用-c
選項。
例如,執行
a=11; printf '%s\n' "$a"
一個人會用
bash -c 'a=11; printf '\''%s\n'\'' "$a"'
所以C代碼是
#include <unistd.h>
void main(void) {
char *name[3];
name[0] = "bash";
name[1] = "-c";
name[2] = "a=11; printf '%s\n' \"$a\"';
execvpe(name[0], name, NULL);
}
將execve
替換為execvpe
以避免必須使用env
。
交換env
的 arguments 的順序。它期望變量賦值 ( a=11
) 在命令 ( bash
) 之前。
name[0]="/usr/bin/env";
name[1]="a=11";
name[2]="bash";
name[3]=NULL;
根據env(1) 手冊頁:
SYNOPSIS
env [OPTION]... [-] [NAME=VALUE]... [COMMAND [ARG]...]
DESCRIPTION
Set each NAME to VALUE in the environment and run COMMAND.
不確定您希望在哪里打印變量,但是您需要這樣的東西
name[0]="/usr/bin/env";
name[1]="a=11";
name[2]="b=22";
name[3]="bash";
name[4]="-c";
name[5]="printf \"%d %d\\n\" $a $b";
name[6]=NULL;
有效。 我在bash之前沒有定義a和b,就報錯了。 謝謝你們!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.