9
votes

Comment utiliser Ctrl-D dans un script shell

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

Exemple

hôte SSH dernier ---> Affiche la liste des utilisateurs qui ont été connectés à cet hôte

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

Supposons que mon script shell soit myscript.sh exécuter myscript.sh

./ myscript.sh

CTL-D

connexion à l'hôte fermé

sortie est affiché

Au lieu de cela, je veux utiliser Ctrl-D dans mon fichier de script


0 commentaires

6 Réponses :


5
votes

Il n'y a aucun moyen de le faire directement. Utilisez un Heredoc pour nourrir STDIN.

./someprog.sh << EOF
something here
EOF


1 commentaires

@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



0
votes
#! /bin/sh
echo 'Enter one line at a time'
echo 'Press CTRL+D to finish'
cat >test.out
echo 'OK'

1 commentaires

Cela fonctionne car cat est un processus distinct, la Ctrl-D frappe qu'au lieu de votre script, la tue et renvoie le contrôle.



0
votes

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"


0 commentaires

3
votes

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


0 commentaires

3
votes

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


0 commentaires

6
votes

Vous pouvez essayer exécu <& -
& - est utilisé pour fermer un descripteur de fichier (PS: tout de Linux est une sorte de fichier ...)
<& - est la fermeture du fichier de fichier 0 = stdin - peut également être écrit comme 0 <& -

Si vous ouvrez un terminal normal dans votre machine Linux et tapez exec <& - Vous verrez votre terminal à fermer / disparaître comme si vous appuyez sur ^ d. < / p>

PS1: De même, EXEC> & - FERME STDOUT

PS2: Si vous fermez STDIN avec EXEC <& - , vous pouvez re-ouvert pour continuer votre script avec quelque chose comme exécu


0 commentaires