2013-09-26 4 views
3

я попытался запустить скрипт в Linux для запуска программы переменного тока сценарий был следующимLinux скрипт работает с программой

#!/bin/bash 
`gcc odd.c -o odd222` 
`chmod +x odd222` 
echo `./odd222` 

и odd.c является

main() 
{ 
int i; 
printf("enter the no."); 
scanf("%d",&i); 
printf("shiv"); 
} 

, но проблема в том, что когда я запускаю этот скрипт, все инструкции scanf выполняются, тогда все выходы показаны simentaniously ....

, если я не помещаю эхо до ./odd222, тогда он говорит, что ошибка введите c ommand not found («введите» первый элемент в printf.

любезно помочь мне

+1

Что вы спрашиваете, очень неясно. Также непонятно, почему вы используете серьезные сценарии в своем скрипте ... удалите их все и замените последнюю строку простым «./odd222» (без кавычек), и я думаю, что все будет работать так, как вы ожидаете. – mah

+0

В вашем скрипте есть несколько сбоев. Прежде всего вам не нужно делать исполняемый файл odd222. gcc должен справиться с этим сам по себе. Во-вторых, не повторяйте вывод вашего odd222. Попробуйте ./odd222 прямо в вашем скрипте. – dragosht

ответ

5

Избавьтесь от обратных шагов, chmod и echo. Все, что вам нужно сделать, это запустить gcc, а затем запустить вашу программу.

#!/bin/bash 
gcc odd.c -o odd222 
./odd222 

Было бы неплохо попытаться запустить программу, если она успешно компилируется. Вы можете сделать это условным, используя &&.

#!/bin/bash 
gcc odd.c -o odd222 && ./odd222 

Также было бы полезно изменить ваш код C, чтобы гарантировать, что распечатки распечатываются немедленно. Вывод обычно буферизируется по строке, что означает, что он отображается только после того, как вы напишете полную строку с новой строкой \n в конце. Вы хотите, либо напечатать строку:

printf("enter the no.\n"); 

или промывать выход в явном виде:

printf("enter the no."); 
fflush(stdout); 
-1

Вам не нужно делать, чтобы

echo `./odd222` 

Если вы просто написать

./odd222 

Оболочка пытается выполнить программу в соответствии с тем, как он определяет файл должен быть выполненным. Просто внесите эти изменения, ваш код будет работать.

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

Когда вы пишете

echo `./odd222` 

он не признает command.Hence его ждет там only.echo не имеет ничего общего с нашей программой.

+0

Ваш последний абзац неверен. «Echo» не имеет ничего общего с входом, которое получает программа. –

+0

см. Мой пересмотренный ответ. Я не имел в виду, что – Arya

+0

Боюсь, что предложения, которые вы добавили, еще более смущены. Первая половина вашего ответа в порядке. –

0

Здесь пока несколько улучшений:

Удалите перевернутые кавычек в вашем сценарии, нет необходимости из них.

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

Пример:

var=`gcc odd.c -o odd222` 
echo $var # this prints the gcc command output 

запустить Кроме исполняемый файл без эха

gcc odd.c -o odd222 
chmod +x odd222 
./odd222 

Вы можете удалить chmod строки из вашего сценария, как вы уже изменили файл в исполняемом режим и нет потребность в нем каждый раз.

odd.c

#include <stdio.h> 

int main() 
{ 
    int i; 
    printf("enter the no."); 
    scanf("%d",&i); 
    printf("shiv = %d", i); 

    return 0; 
} 
+0

@JohnKugelman, спасибо, отредактировал это, надеюсь, теперь это станет лучше и понятнее. – user1502952

Смежные вопросы