Почему утилита `bc` не работает с` ^ C`

Недавно я использовал утилиту bc, а Ctrl + C не может быть использована для выхода из программы. Сигнал Ctrl + C interrupt возвращается с сообщением use quit to exit. Я могу использовать EOF (Ctrl + D) или quit для выхода.

Я прочитал разницу между ^Z и ^C. Технически ^C должен завершить программу (и большинство программ прервали прием сигнала interrupt). Но bc возвращает сообщение с просьбой использовать quit вместо этого.

Мне было интересно, есть ли в этом конкретное преимущество?

1
задан 26 September 2015 в 18:20

7 ответов

Мне было интересно, есть ли в этом конкретное преимущество?

Да. Если вы вызываете длинную функцию в bc, вы можете прервать ее с помощью элемента управления + c, и она не выйдет из самого bc, но функция, запущенная внутри bc.

Вот пример того, как я это делаю: [ ! d3]

$ bc twins.b 
bc 1.06
Copyright 1991-1994, 1997, 1998, 2000 Free Software Foundation, Inc.
This is free software with ABSOLUTELY NO WARRANTY.
For details type `warranty'. 

typing 'twins (10)' will print all twin primes less than 10.
twins(10000000)
^C
Runtime error (func=primes, adr=113): interrupted execution
Interruption completed.
print "As you can see, bc is still running\n"
As you can see, bc is still running
5+7
12

Если вы хотите увидеть функцию близнецов, загрузите исходный код bc и посмотрите в каталоге примеров.

2
ответ дан 23 May 2018 в 17:09

Сценарий или приложение могут улавливать и предотвращать события и, следовательно, внутренне предлагают методы завершения.

Вы можете увидеть простой пример в следующем сценарии оболочки:

# Call trapint function when recive SIGINT
trap trapint SIGINT

# trapint function:
function trapint {
 echo "*** SIGINT received ***"  # Print a message
 exit 0                          # Exit gracefully
}

[ ! d3]

1
ответ дан 23 May 2018 в 17:09
  • 1
    Как bc & отличается от bc? – Darshan Chaudhary 26 September 2015 в 17:51
  • 2
    CTRL-Z не выходит, но приостанавливает программу и помещает ее в фоновом режиме, так что терминал снова можно использовать. Вы продолжаете программу, введя fg ( f ore g round) в подсказку терминала. Это работает, по крайней мере, если ваша оболочка bash, но, возможно, не с другими. – Byte Commander 26 September 2015 в 17:54
  • 3
    Я сделал некоторые изменения, не стесняйтесь возвращаться. – Helio 26 September 2015 в 18:20
  • 4
    @ A.B .: Добро пожаловать! ; -) Обратите внимание, что мои изменения не проверены. – Helio 26 September 2015 в 18:26
  • 5
    @Helio У моей версии была ошибка: echog. Это функция, определенная в моем скрипте. :) bur не во фрагменте. – A.B. 26 September 2015 в 18:28
Мне было интересно, есть ли в этом конкретное преимущество?

Да. Если вы вызываете длинную функцию в bc, вы можете прервать ее с помощью элемента управления + c, и она не выйдет из самого bc, но функция, запущенная внутри bc.

Вот пример того, как я это делаю: [ ! d3]

$ bc twins.b 
bc 1.06
Copyright 1991-1994, 1997, 1998, 2000 Free Software Foundation, Inc.
This is free software with ABSOLUTELY NO WARRANTY.
For details type `warranty'. 

typing 'twins (10)' will print all twin primes less than 10.
twins(10000000)
^C
Runtime error (func=primes, adr=113): interrupted execution
Interruption completed.
print "As you can see, bc is still running\n"
As you can see, bc is still running
5+7
12

Если вы хотите увидеть функцию близнецов, загрузите исходный код bc и посмотрите в каталоге примеров.

2
ответ дан 23 May 2018 в 17:09
Мне было интересно, есть ли в этом конкретное преимущество?

Да. Если вы вызываете длинную функцию в bc, вы можете прервать ее с помощью элемента управления + c, и она не выйдет из самого bc, но функция, запущенная внутри bc.

Вот пример того, как я это делаю: [ ! d3]

$ bc twins.b 
bc 1.06
Copyright 1991-1994, 1997, 1998, 2000 Free Software Foundation, Inc.
This is free software with ABSOLUTELY NO WARRANTY.
For details type `warranty'. 

typing 'twins (10)' will print all twin primes less than 10.
twins(10000000)
^C
Runtime error (func=primes, adr=113): interrupted execution
Interruption completed.
print "As you can see, bc is still running\n"
As you can see, bc is still running
5+7
12

Если вы хотите увидеть функцию близнецов, загрузите исходный код bc и посмотрите в каталоге примеров.

2
ответ дан 23 May 2018 в 17:09
Мне было интересно, есть ли в этом конкретное преимущество?

Да. Если вы вызываете длинную функцию в bc, вы можете прервать ее с помощью элемента управления + c, и она не выйдет из самого bc, но функция, запущенная внутри bc.

Вот пример того, как я это делаю: [ ! d3]

$ bc twins.b 
bc 1.06
Copyright 1991-1994, 1997, 1998, 2000 Free Software Foundation, Inc.
This is free software with ABSOLUTELY NO WARRANTY.
For details type `warranty'. 

typing 'twins (10)' will print all twin primes less than 10.
twins(10000000)
^C
Runtime error (func=primes, adr=113): interrupted execution
Interruption completed.
print "As you can see, bc is still running\n"
As you can see, bc is still running
5+7
12

Если вы хотите увидеть функцию близнецов, загрузите исходный код bc и посмотрите в каталоге примеров.

2
ответ дан 23 May 2018 в 17:09
Мне было интересно, есть ли в этом конкретное преимущество?

Да. Если вы вызываете длинную функцию в bc, вы можете прервать ее с помощью элемента управления + c, и она не выйдет из самого bc, но функция, запущенная внутри bc.

Вот пример того, как я это делаю: [ ! d3]

$ bc twins.b 
bc 1.06
Copyright 1991-1994, 1997, 1998, 2000 Free Software Foundation, Inc.
This is free software with ABSOLUTELY NO WARRANTY.
For details type `warranty'. 

typing 'twins (10)' will print all twin primes less than 10.
twins(10000000)
^C
Runtime error (func=primes, adr=113): interrupted execution
Interruption completed.
print "As you can see, bc is still running\n"
As you can see, bc is still running
5+7
12

Если вы хотите увидеть функцию близнецов, загрузите исходный код bc и посмотрите в каталоге примеров.

2
ответ дан 23 May 2018 в 17:09
Мне было интересно, есть ли в этом конкретное преимущество?

Да. Если вы вызываете длинную функцию в bc, вы можете прервать ее с помощью элемента управления + c, и она не выйдет из самого bc, но функция, запущенная внутри bc.

Вот пример того, как я это делаю: [ ! d3]

$ bc twins.b 
bc 1.06
Copyright 1991-1994, 1997, 1998, 2000 Free Software Foundation, Inc.
This is free software with ABSOLUTELY NO WARRANTY.
For details type `warranty'. 

typing 'twins (10)' will print all twin primes less than 10.
twins(10000000)
^C
Runtime error (func=primes, adr=113): interrupted execution
Interruption completed.
print "As you can see, bc is still running\n"
As you can see, bc is still running
5+7
12

Если вы хотите увидеть функцию близнецов, загрузите исходный код bc и посмотрите в каталоге примеров.

2
ответ дан 23 May 2018 в 17:09

Другие вопросы по тегам:

Похожие вопросы: