- 1
system("PAUSE")
Нашли или выдавили из себя код, который нельзя назвать нормальным, на который без улыбки не взглянешь? Не торопитесь его удалять или рефакторить, — запостите его на говнокод.ру, посмеёмся вместе!
+15
system("PAUSE")
Красивое, оптимальное, и самое главное, кроссплатформенное решение для ожидания нажатия клавиши.
http://habrahabr.ru/post/147104/
Предупреждая вопрос "где здесь с++", отвечу - автор считал, что он пишет на с++, и даже использовал пару конструкций оттуда - перегрузку функций и new/delete.
Fai 05.07.2012 09:13 # +6
не удержался
HaskellGovno 05.07.2012 09:55 # +2
bormand 05.07.2012 10:13 # +2
HaskellGovno 05.07.2012 10:53 # +4
defecate-plusplus 05.07.2012 15:58 # +6
rat4 05.07.2012 16:09 # +1
defecate-plusplus 05.07.2012 16:13 # +2
да. нет. отменить.
bormand 05.07.2012 16:19 # 0
[Отменить] [Отмена]
Fai 05.07.2012 16:22 # +4
[Продолжить] [Отменить]
guest 13.07.2012 11:22 # +1
[Да, не хочу] [Нет, не хочу]
Lure Of Chaos 14.07.2012 10:59 # +1
HaskellGovno 14.07.2012 12:15 # +1
TarasB 14.07.2012 12:40 # +2
Lure Of Chaos 14.07.2012 12:50 # +2
TarasB 14.07.2012 13:18 # +2
bormand 05.07.2012 16:17 # +5
Несколько раз сталкивался кстати с такой ерундой, только не любую, а F1 обычно.
http://www.korova.ru/humor/pics/0000/nokey.gif
HaskellGovno 05.07.2012 21:33 # +1
bormand 05.07.2012 21:38 # +2
Да настраивается то это легко (stop on - all but keyboard). Но пока гром не грянет - мужик не перекрестится...
ZX_Spectrum 08.07.2012 16:39 # 0
bormand 08.07.2012 19:23 # +1
rat4 08.07.2012 20:15 # +1
Выдернуть шнур, выдавить стекло.
ZX_Spectrum 09.07.2012 00:02 # 0
HaskellGovno 05.07.2012 21:31 # 0
Нажать клавишу мыши или reset достаточно?
interested 05.07.2012 10:13 # +1
system("claws");
HaskellGovno 05.07.2012 10:54 # +2
http://govnokod.ru/10760
http://govnokod.ru/9651
http://govnokod.ru/912
bormand 05.07.2012 11:04 # +3
bormand 05.07.2012 11:36 # +1
sayidandrtfm 05.07.2012 12:02 # 0
Под линуксом и вендой работает.
В другом дело:
$ man 3 system
…
DESCRIPTION
system() executes a command specified in command by calling /bin/sh -c command,
and returns after the
command has been completed.
….
defecate-plusplus 05.07.2012 12:06 # +4
даже тем более в регистрозависимом unix окружении капслоком
bormand 05.07.2012 12:17 # +1
The system function passes command to the command interpreter, which executes the string as an operating-system command. system refers to the COMSPEC and PATH environment variables that locate the command-interpreter file (the file named CMD.EXE in Windows NT). If command is NULL, the function simply checks to see whether the command interpreter exists.
> Под линуксом и вендой работает.
А откуда у вас в linux pause?!
roman-kashitsyn 05.07.2012 12:19 # +4
Наверное, есть специальный дистрибутив Windux
sayidandrtfm 05.07.2012 13:54 # +1
roman-kashitsyn 05.07.2012 14:11 # +1
Fai 05.07.2012 14:40 # +3
А дальше и не надо.
sayidandrtfm 05.07.2012 12:58 # 0
http://books.google.com.ua/books?id=Qu6H8fnAvGoC&pg=PA450&lpg=PA450 &dq=how+to+emulate+pause+in+bash&source= bl&ots=ChhP6lqF22&sig=hBQIJN30oSbJil8ofu 5CrC0RY7g&hl=en&sa=X&ei=Q2D1T-GfNMWZ-wbltMjhBg&ved=0CFIQ6AEwAw#v=onepage&q=ho w%20to%20emulate%20pause%20in%20bash&f=f alse
bormand 05.07.2012 13:20 # 0
P.S. Движок ГК рассовывает пробелы в длинные ссылки ;(
sayidandrtfm 05.07.2012 13:34 # 0
Для Ъ:
0) «Bash Cookbook: Solutions And Examples for Bash Users»
...
17.23 Emulating the DOS Pause command
...
pause () {
read -p 'Press any key...'
}
…
1) Пишем скрипт, ставим права
2) Делам симлинк на /bin/Pause
3) $ cat /home/work/C99/pause.c
#include <stdlib.h>
#include <stdio.h>
int main(int argc, char **argv )
{
printf("Hello, %s\n", &(argv[0])[2]);
system ("Pause");
return 0;
}
unu-foja 05.07.2012 14:32 # +2
Пользователя lfs видно невооруженным взглядом.
А если будет два таких умника, которым нужно будет немного различное поведение pause? Ну можно PATH экспортировать перед запуском - но костыли уже чувствуются отчетливее.
Предположим, нужно будет локализовать, прикажете отдельный *.po для pause писать?
bormand 05.07.2012 15:05 # +6
Непонятно еще кто кем пользуется - пользователь lfs, или lfs пользователем.
unu-foja 05.07.2012 15:18 # +1
Скорее подкалывал по поводу помойки в bin, lfs пришлась к слову.
sayidandrtfm 05.07.2012 15:43 # +1
sayidandrtfm 05.07.2012 15:44 # 0
http://bit.ly/LVDQ7K
>>Предположим, нужно будет локализовать прикажете отдельный *.po для pause писать?
По обстоятельствам.
Вообще же, не писал бы вовсе, как и локализацию для системных уведомлений,
для … «будь мужиком, учи английский, бле@ть»(с)
unu-foja 05.07.2012 18:22 # +1
Поясните мысль: что вы конкретно предлагаете?
sayidandrtfm 05.07.2012 18:38 # 0
«UNIX way» жеж, не?
unu-foja 05.07.2012 19:03 # +1
> «UNIX way» жеж, не?
Это, конечно, хорошо. И стоит ожидать одинакового поведения. Но оба вышеописанных "конкурента" могли бы добавить в виде префикса имя программы. И таки стоит ожидать, что любители system("pause") будут ценить unix-way?
Ну и, главное: допустим /bin/Pause уже есть. Просто погаться на то, что там нужное поведение или выделять пакет а-ля cmdexe-compat и ставить в зависимость (но это же не стандарт => проблема совместимости)?
Да и вообще: создается pause доступная снаружи, но используется только изнутри - не совсем комильфо.
sayidandrtfm 05.07.2012 19:31 # 0
«Немного другое поведение», можно осуществлять, за счёт параметров передаваемых скрипту.
>>И таки стоит ожидать, что любители system("pause") будут ценить unix-way?
Это у них спрашивать, чего от них ожидать.
>>Ну и, главное: допустим /bin/Pause уже есть.
О каких дистрибутивах мы говорим?
Документация, мейнтейнеры, стандартизация для конкреного дистра...вот это вот всё — что, кто, где, когда?
Фактически, /bin/Pause предназначена для одного - эмуляция досовской Pause, всё.
>>но используется только изнутри
$ Pause и system("Pause") - same result.
И причём тут 'только'?
unu-foja 05.07.2012 19:56 # +1
Спасибо, конечно, но чуть выше я попросил конкретный пример: что именно (и как) вы собираетесь передавать в данном случае.
> Это у них спрашивать, чего от них ожидать.
Тогда зачем: > «UNIX way» жеж, не? А так понимал, что вы пишите с точки зрения автора system("pause") или у него есть добрый мейнтейнер с совочком?
> Документация, мейнтейнеры, стандартизация для конкреного дистра...вот это вот всё — что, кто, где, когда?
То есть когда линк в /bin - все нормально, а когда шаг влево-вправо - уже ЧГК? Замечательно, чо.
Это же вас не смутила "кроссплатформенность" по отношению к сабжу. Или для вас "можно окостылить - и заработает" - уже кроссплатформенно?
> Фактически, /bin/Pause предназначена для одного - эмуляция досовской Pause, всё.
> И причём тут 'только'?
/0 или два стула?
sayidandrtfm 05.07.2012 22:14 # 0
О главном:
1) использовать system(''Pause''); неразумно ибо слишком накладно.
2) для эмуляции DOS'овской Pause было предложено решение.
Прочее:
>>что именно (и как) вы собираетесь передавать в данном случае.
Передавать туда, пока что, ничего не собираюсь, но, указал на способ как это можно делать.
>>«UNIX way»
А «UNIX way» при том, что вы, спрашивали о 'немного различном поведение'.
Насколько различным должно быть поведения, что бы для его реализации было неразумно
использовать передачу параметром pause.sh?
Я пишу со своей точки зрения.
>>уже ЧГК?...
Вы меня совсем не поняли.
Если это дистрибутив типа убунты, то там, будет нужно и сопровождение и стандартизация поведения и прочее прочее. Если это серверная гента для маленькой такой компании, то
достаточно будет в _заметках_конфигурации_серванта_ оставить информацию
о костыле, что и как.
>>Или для вас "можно окостылить - и заработает" - уже кроссплатформенно?
Как мне представляется:
кроссплатформенность - стандартизированная эмуляция поведения систем на одни и те же вызовы.
Написание 'костылей' - не стандартизированная эмуляция поведения систем на одни и те же вызовы.
>> И причём тут 'только'?
Имелось ввиду то, что в своих скриптах, вы можете использовать данную эмуляцию как посчитаете нужным или не использовать совсем — вам решать.
unu-foja 06.07.2012 14:49 # 0
Безотносительно контекста, а два раза просил конкретно объяснить. Как передавать аргументы shell-скриптам я отлично знаю, интересно было как в случае system("PAUSE") или вы предлагали не ограничиваться pause - а менять в зависимости от платформы?
> Насколько различным должно быть поведения
Если со стороны пользователя (но это каждый отдельный пользователь будет окостыливать), то проблемы нет. Раз речь была о кроссплатформенности, я ожидал шагов на стороне автора программы.
> было неразумно использовать передачу параметром pause.sh?
Вот мне и было интересно куда параметры писать, вызывается-то из system. Неужели "PAUSE -key" (тогда изначальный смысл теряетсяд - раз все равно на уровне исходников менять)?
> кроссплатформенность - стандартизированная эмуляция поведения систем на одни и те же вызовы.
Учитывая, что pause - на линуксе не стандарт, вы имеете ввиду, что о портабелельности в контексте сабжа речи не идет, правильно ли понимаю?
Тогда не понятно, зачем было:
>>Кроссплатформенное решение
> Под линуксом и вендой работает.
Звучит же будто наоборот.
sayidandrtfm 06.07.2012 18:51 # 0
system("ls -al");
>> Если со стороны пользователя
Пользователь должен(если адекватен) прочитать ман и действовать в соответствии.
Речь шла о поведении самой Pause, насколько разного поведения, от неё ожидаете увидеть вы. Указал на юникс вэй, как то обстоятельство, что не в широком диапазоне, должно быть это самое 'немного различном поведение' Pause, дабы реализовать его через передачу параметров.
>>что о портабелельности в контексте
сабжа речи не идет, правильно ли понимаю?
Для чего вас так интересует портабельность, в данном случае?
>>Учитывая, что pause - на линуксе не стандарт
При каких тут ядро?
Это вопрос к оболочке, баш, даш, кш и т. дш.
Тем более, что read - is a BASH shell builtin.
Вот тебе баш и ебаш install-DOS-Pause-emul.sh.
Кроссплатформенность имеет 3 аспекта:
1) Если чего-то нет - сиди жди когда стандартизирует какой-нибудь исо комитет и дистростроители возьмутся поддерживать;
2) Дистростроители сами возьмутся, без всяких комитетов, ввиду объективной необходимости;
3) Если чего-то нет - делаешь сам. Сам себе исо комитет, сам себе мейнтейнер.