BASH, как выполнить команду по завершению скрипта? - PullRequest
6 голосов
/ 07 ноября 2010

У меня есть скрипт bash, который в основном служит драйвером. По какой-то причине Ubuntu не может назначить последовательный порт Bluetooth самостоятельно. Функция скрипта состоит в том, чтобы подключить устройство Bluetooth, а затем назначить ему место для доступа в / dev / bluetooth serial. Наконец, когда устройство отключается или прерывается нажатием кнопки «q», оно убивает порт.

Я хотел бы знать, есть ли какой-нибудь способ выполнить команду в скрипте bash при выполнении ctrl-C, чтобы он не оставил непригодное устройство на месте в моей папке / dev

Ответы [ 3 ]

10 голосов
/ 07 ноября 2010

Да, вы можете использовать команду 'trap'.Нажатие CTRL-C отправляет SIGINT, поэтому мы можем использовать ловушку, чтобы поймать это:

#!/bin/bash

trap "echo hello world" INT

sleep 10

Если вы нажмете CTRL-C при запуске, он выполнит команду (echo hello world) :-)

2 голосов
/ 07 ноября 2010
 $ help trap

 trap: trap [-lp] [arg signal_spec ...]
     The command ARG is to be read and executed when the shell receives
     signal(s) SIGNAL_SPEC.  If ARG is absent (and a single SIGNAL_SPEC
     is supplied) or `-', each specified signal is reset to its original
     value.  If ARG is the null string each SIGNAL_SPEC is ignored by the
     shell and by the commands it invokes.  If a SIGNAL_SPEC is EXIT (0)
     the command ARG is executed on exit from the shell.  If a SIGNAL_SPEC
     is DEBUG, ARG is executed after every simple command.  If the`-p' option
     is supplied then the trap commands associated with each SIGNAL_SPEC are
     displayed.  If no arguments are supplied or if only `-p' is given, trap
     prints the list of commands associated with each signal.  Each SIGNAL_SPEC
     is either a signal name in <signal.h> or a signal number.  Signal names
     are case insensitive and the SIG prefix is optional.  `trap -l' prints
     a list of signal names and their corresponding numbers.  Note that a
     signal can be sent to the shell with "kill -signal $$".
0 голосов
/ 07 ноября 2010

Используйте ловушку.

trap "do_something" SIGINT

где "do_something" - это имя команды или функции.

...