.

           .

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 readzum 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
}

verwandte Informationen