J'ai un script de coquille Bash qui nécessite Ctrl-D de sortir du terminal.can que quiconque me dise comment l'utiliser dans le script shell p>
hôte SSH dernier ---> Affiche la liste des utilisateurs qui ont été connectés à cet hôte p>
J'ai des hôtes différents La sortie est annexée à une finale et lorsque j'exécute ce script shell particulier avec une autre série de commandes, j'utilise Ctrl-D pour voir la sortie p>
Supposons que mon script shell soit myscript.sh exécuter myscript.sh p>
./ myscript.sh p> blockQuote>
CTL-D P>
connexion à l'hôte fermé p>
sortie est affiché p>
Au lieu de cela, je veux utiliser Ctrl-D dans mon fichier de script P>
6 Réponses :
Il n'y a aucun moyen de le faire directement. Utilisez un Heredoc pour nourrir STDIN.
./someprog.sh << EOF something here EOF
@Abrams merci, mais j'ai essayé d'exécuter la cmd ci-dessus, je reçois ça? Le pseudo-terminal EOF ne sera pas attribué car STDIN n'est pas un terminal. > Pouvez-vous me dire que les wats se produisent merci
#! /bin/sh echo 'Enter one line at a time' echo 'Press CTRL+D to finish' cat >test.out echo 'OK'
Cela fonctionne car cat code> est un processus distinct, la Ctrl-D frappe qu'au lieu de votre script, la tue et renvoie le contrôle.
Pourquoi ne dis-tu pas Dernier code> Combien de lignes que vous voulez voir? Ensuite, vous n'aurez pas à vous interrompre avec un CTRL + D. Par exemple, pour voir 10 lignes, utilisez:
ssh hostname "last -10"
Pour détecter Ctrl-D dans des scripts et exécuter la logique personnalisée sur celle-ci, vous pouvez lire l'entrée Char par char et vérifier si le code de clé de caractère correspond à CTRL-D.
Voici un exemple de code: P>
IFS= while true; do read -n 1 key line=$line$key printf -v key_code "%d" "'$key" if [ $key_code -eq 4 ]; then echo "Ctrl-D pressed!" fi if [ "$key" = '' ]; then echo "Line was $line" line= fi done
Utilisez cette
read Input #When ^D is used, read ends up with the exit code "1" if [[ $? == 1 ]] then echo "[Ctrl+D] is captured" fi
Vous pouvez essayer Si vous ouvrez un terminal normal dans votre machine Linux et tapez PS1: De même, PS2: Si vous fermez STDIN avec exécu <& - code>
& - code> est utilisé pour fermer un descripteur de fichier (PS: tout de Linux est une sorte de fichier ...)
<& - code> est la fermeture du fichier de fichier 0 = stdin - peut également être écrit comme
0 <& - code> p>
exec <& - code> Vous verrez votre terminal à fermer / disparaître comme si vous appuyez sur
^ d. code> < / p>
EXEC> & - CODE> FERME STDOUT P>
EXEC <& - CODE>, vous pouvez re-ouvert pour continuer votre script avec quelque chose comme
exécu dev / tty p> p> p> P>