Ich habe ein Shell-Skript, das eine Antwort mit „j/n“ verlangt. In der Eingabeaufforderung vor der Eingabe habe ich das Signal „ctrl-c“ verwendet, das die Signalverarbeitungsfunktion aufruft. In der Signalverarbeitungsfunktion gibt es eine Eingabeaufforderung „q“ zum Beenden oder „y“, und „y“ sollte mit der ERSTEN Leseaufforderung verwendet werden.
Ich habe versucht (( echo "y" | read )), aber es hat nicht funktioniert
Dies ist ein Teil meines Skripts:
IntHandle ()
{
echo -e "\nUse 'q' to quit "
read var1
if [[ $var1 == q ]]
then
exit 1
else
echo "y" | read ----->here I need "y" to be an input to read prompt
directly and being saved in "ans" variable in
main body where I used control-c
fi
}
trap 'IntHandle' SIGINT
read -p "no valid user id entered, new user ids? [y\n]: " ans ----> here
used control-c signal before give y/n to ans
if [[ $ans == "y" ]]
then
read -p " username :" name
fi
.
.
.
.
.
Die Ausgabe sollte wie folgt aussehen:
keine gültige Benutzer-ID eingegeben, neue Benutzer-IDs? [j\n]: #Strg-C eingegeben
„Verwenden Sie zum Beenden „q““ „y ------> hier wird in der Signalverarbeitungsfunktion „y“ statt „q“ eingegeben. Anschließend wird es in der Variable „ans“ gespeichert, wodurch die Bedingung erfüllt wird, dass ein Benutzername abgefragt wird.
Benutzernamen: Larry -----> der Name, der nach der wahren Bedingung eingegeben wird. . . .
Antwort1
Dies ist ein XY-Problem. Warum um Himmels Willen verwenden wir es read
zum Festlegen einer Variablen in einem Skript?
Stellen Sie es wie gewohnt ein.ans=y
Die Funktion sähe dann folgendermaßen aus:
IntHandle ()
{
echo -e "\nUse 'q' to quit "
read var1
if [[ $var1 == q ]]
then
exit 1
else
ans=y
fi
}