У меня есть 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), он всегда будет возвращать "неправильное количество аргументов". Я знаю, что это, вероятно, простое решение, но я новичок в этом.
Удивлены? Ваш сценарий оболочки и ваша программа на C - это две совершенно разные вещи. Со следующей строкой
system("./findName.sh");
вы вызываете только свой скрипт, но вы не передаете никаких аргументов. Вы должны называть свой скрипт следующим образом
system("./findName.sh hereisyourargument");
execve
или аналогичного вместо system
, но они просты в использовании, только если вам не нужно разветвлять вашу программу
system
чтобы делать то, что вы хотите, но опять же, почему вы это делаете?