Sto scrivendo un wrapper bash per imparare alcuni concetti di scripting. L'idea è di scrivere uno script in bash e impostarlo come shell dell'utente al login.SIGINT per annullare la lettura in bash script?
Ho fatto un ciclo while che l'input read
s e eval
s dell'utente, e poi notato che, ogni volta che utente ha digitato CTRL + C
, lo script interrotto così al termine della sessione utente.
Per evitare questo, ho intrappolato SIGINT
, non facendo nulla nella trappola.
Ora, il problema è che quando si digita CTRL + C
a metà di un comando, non viene annullato come si farebbe su bash: ignora semplicemente CTRL + C
.
Quindi, se digito ping stockoverf^Cping stackoverflow.com
, ottengo ping stockoverfping stackoverflow.com
anziché il ping stackoverflow.com
che volevo.
C'è un modo per farlo?
#!/bin/bash
# let's trap SIGINT (CTRL + C)
trap "" SIGINT
while true
do
read -e -p "$USER - SHIELD: `pwd`> " command
history -s $command
eval $command
done
xdotool farebbe il trucco, come un hack al 100%. Si ottiene un '^ C^A^K' e una linea vuota che non si mostra in puro bash (solo'^C'), ma è meglio di niente. Ad ogni modo, sarebbe fantastico non dipendere da 'xdotool', e per evitare quei marcatori extra - diciamo, fallo proprio come bash funziona. Ad ogni modo, non ho ricevuto l'invito RTFM ... Che cosa dovrebbe mostrare il debug? – mgarciaisaia
Sì, questo è un enorme hack. Ma nello stato, questo fa il lavoro. Il modo giusto per seguire l'idea originale deve accedere ai descrittori di file tramite ioctl. –
@mgarciaisaia Informazioni su cosa * debug * potrebbe fare e come potrebbe essere utilizzato. dai un'occhiata a [profiling bash in nanoseconds] (http://stackoverflow.com/a/20855353/1765658) –