Есть ли способ дубинки двух команд Linux вместе в функции system () в C? - PullRequest
1 голос
/ 21 февраля 2020

Я хотел выполнить команду who и вырезать необходимую информацию, такую ​​как who | cut -d " " -f 1,21,23, но с помощью функции system () в c.

Я попытался сделать system("who | cut -d " " -f 1,21,23"), который не работал.

Код:

#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#define ErrorBC -69
int main(int argc, char* argv[]){
    if(argc < 2){
        printf("No arguments passed\n");
        return -69;
    }
    else{
        int i=0;
        for(i=1;i<argc;i++){
        if((strcmp("kernel",argv[i]))==0){
            system("uname -s -r");
        }
        else if(((strcmp("ulog",argv[i]))==0)){
                system("who | cut -d " " -f 1,21,23");
        }
        else{
            printf("%s is not a valid options\n",argv[i]);
        }
    }
    }
}

Вывод:

c99 test.c
/usr/sahil: ./a.out ulog
Usage: cut {-b <list> [-n] | -c <list> | -f <list> [-d <char>] [-s]} file ...

1 Ответ

4 голосов
/ 21 февраля 2020

С "who | cut -d " " -f 1,21,23" у вас есть две строки: "who | cut -d " и " -f 1,21,23". Они объединяются в "who | cut -d -f 1,21,23".

Чтобы включить двойные кавычки в строки C, вам необходимо экранировать их с помощью обратного слэ sh: "who | cut -d \" \" -f 1,21,23".

...