Main in script

Автор: peter_ir Дата: 23.03.2008 18:09 Здравствуйте!

В языке C main возвращает int, а есть ли возможность получить это значение при
запуске моей программы из скрипта или что надо сделать в программе, чтобы это
можно было просто сделать? Например, как при запуске wc в `...` в скрипт
передаётся результат работы wc.
Re: main in script 23.03.2008 18:23Bircoph Это же и есть код возврата программы, получается экспансией
**$?**.

Если программа зовётся prog, то
---
prog; echo $?
---
Покажет её код возврата, для $(prog) всё аналогично.

Неужели так man bash лениво почитать, м?
Re: main in script 23.03.2008 20:34peter_ir Представьте себе, читал и видел там $? и даже пробовал её выводить, но,
насколько я сейчас помню, всегда возвращался 0, даже тогда, когда я специально
запускал из скрипта программу с таким параметром, чтобы main вернула не 0.
У меня сложилось впечатление, что в ней содержится код возврата команды shell'а
как таковой, т.е. если программа запустилась shell'ом успешно, то в ней будет 0.
Возможно, конечно, что я ошибаюсь. У меня tcsh, но и там есть $?.
Правда, я запускал её не просто указанием имени, а в ``, т.е.
set var = `prog parameter`
Re: main in script 23.03.2008 20:45kosmonavt ---
foreach i (`seq 0 5`)
set AAA = `sh -c "echo Ok; exit $i"`
echo "$AAA $?"
end
---
Re: main in script 23.03.2008 20:47Bircoph > насколько я сейчас помню, всегда возвращался 0, даже
> тогда, когда я специально запускал из скрипта программу с
> таким параметром, чтобы main вернула не 0.

Это чушь собачья. Доказательство:
---
$ true; echo $?
0
$ false; echo $?
1
---

> если программа запустилась shell'ом успешно, то в ней
> будет 0

Абсолютно неверно. Вы полностью не понимаете работы shell.

> У меня tcsh,

Да вы, батентка, мазохист...

> но и там есть $?

Проверил под tcsh, всё работает:
---
# true; echo $?
0
# false ; echo $?
1
---

> set var = `prog parameter`

Это не играет роли:
---
# set a=`true` ; echo $?
0
# set a=`false` ; echo $?
1
---
Re: main in script 24.03.2008 10:29peter_ir Прошу прощения, оказалось, что я ошибся - при передаче программе неверного параметра скрипт ее
просто не вызывал, если же вызывать ее по имени, то в $? действительно содержится значение,
возвращенное main. Он будет в $? и при вызове в `...`, но присвоение значения переменной по
set var = `/bin/tcsh -c "prog par"` , так же, как и по
set var = `prog par`,
при этом не происходит, она остается неинициализированной,
так что и в этом случае приходится использовать $?.

Петр.
Re: main in script 24.03.2008 18:27Bircoph > но присвоение значения переменной по
> set var = `/bin/tcsh -c "prog par"` , так же, как и по
> set var = `prog par`,
> при этом не происходит, она остается неинициализированной,
> так что и в этом случае приходится использовать $?.

Вы не правильно поняли: переменной var будет присвоен вывод
вышей программы в stdout. Если она выведет "ok", в $var будет
"ok". Код возврата переменной $var не должен присваиваться в принципе, для этого и существует специальная экспансия $?.
Re: main in script 24.03.2008 23:01peter_ir Насчёт S? я, кажется, что-то понял, но как сделать вывод программы в stdout
так, чтобы он мог быть получен из `...` или через pipe, пока нет.
Сегодня, включив компьютер, я обнаружил, что и в консоли и в X-ах пропало
переключение в русский регистр, в консоли из-за того, что изменился файл
/etc/sysconfig/keyboard, а с X-ами я долго возился, пока исправил.
Re: main in script 25.03.2008 01:25Bircoph Я же вам примеры привёл.
Что тут понимать ещё?
Re: main in script 25.03.2008 19:42peter_ir Действительно, всё оказалось именно так - вывод программы в stdout можно
получить из вызова её в `...`. Мне до сих пор этого не требовалось и я думал,
что для этого надо предпринимать какие-то специальные действия в программе, хотя
я должен был и сам это понимать.
RSS-материал