Как заставить мой теперь исполняемый скрипт оболочки принять строку

0

У меня есть shell-скрипт findName.sh, который найдет имя, которое соответствует введенному мне идентификатору пользователя.

#!/bin/sh 
# for use , in some  project.....

if [ $# -eq 1 ]; then
# if there is exactly one command line arg used with the command
# do something(s).
    if [ -s /class/rolls/CSCE215-803 ]; then
    grep $1 /class/rolls/CSCE215-803 > ./output

if [ -s ./output ]; then
    cut -c 1-30 ./output
else
    echo "Sorry that person is not in CSCE215-803"
fi
else
    echo "CSCE215-803 file does not exist!"
    fi
else

 echo "Incorrect number of arguments"
 exit 1
fi

Это прекрасно работает...

но когда я помещаю его в файл c++ main.cpp

#include <iostream>
#include <string>
#include <cstdlib>
using namespace std;

int main () {

    system("./findName.sh");

    return 0;
}

когда он скомпилирован для findName, и я пытаюсь выполнить его ie (./findName someUserId), он всегда будет возвращать "неправильное количество аргументов". Я знаю, что это, вероятно, простое решение, но я новичок в этом.

  • 1
    Почему вы это делаете? Вам нужно поместить аргументы вашей программы на C ++ в строку, которую вы передаете system чтобы делать то, что вы хотите, но опять же, почему вы это делаете?
Теги:

1 ответ

0
Лучший ответ

Удивлены? Ваш сценарий оболочки и ваша программа на C - это две совершенно разные вещи. Со следующей строкой

system("./findName.sh");

вы вызываете только свой скрипт, но вы не передаете никаких аргументов. Вы должны называть свой скрипт следующим образом

system("./findName.sh hereisyourargument");
  • 0
    так что если я хотел, чтобы «herisyourargument» был тем, что я хочу набрать на клавиатуре?
  • 0
    в этом случае вам нужно настроить строку командной строки динамически. Но не забывайте избегать спора. Лучшим вариантом является использование execve или аналогичного вместо system , но они просты в использовании, только если вам не нужно разветвлять вашу программу

Ещё вопросы

Сообщество Overcoder
Наверх
Меню