我想執行/usr/bin/env并列印出a=11and 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
我究竟做錯了什么?
uj5u.com熱心網友回復:
不確定您希望在哪里列印變數,但您需要這樣的東西
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;
uj5u.com熱心網友回復:
交換env's 引數的順序。它期望變數賦值 ( 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.
uj5u.com熱心網友回復:
第一個非選項引數應該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.
uj5u.com熱心網友回復:
有效。我沒有在 bash 之前定義 a 和 b,并且出現了錯誤。謝謝你們!
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/455246.html
下一篇:從檔案后面的字串中檢索版本號
