# Suche speziellen Linux-bash-Befehl

## 3PO

Hallo Zusammen,

welcher Linux-bash-Befehl entspricht dem DOS-Batch-Befehl "pause"?

Es soll also nur auf einen Tastendruck gewartet werden, bevor ein Script fortgesetzt wird. 

Noch besser wäre, wenn man mit "j" oder "n" fortsetzen oder abbrechen könnte. 

Gibt es überhaupt so einen Befehl unter Linux?

----------

## Beforegod

Kenne nur sleep 'seconds' .

ansonsten evt. mal dialog oder sowas ansehen (wobei Du dann Programmiern musst)

--

Anhang:

<< j

<< n

----------

## sirro

z.B.:

```
$ read TEMP

y

$ echo ${TEMP}

y

$ if [[ "${TEMP}" == "y" ]]; then echo xxx;fi

```

Musst wohl dem y noch ein Enter spendieren, sonst geht es nicht.

----------

## 3PO

 *sirro wrote:*   

> z.B.:
> 
> ```
> $ read TEMP
> 
> ...

 

Na, das nenne ich doch mal "Express-Hilfe"

Wie müßte das denn dann in einen Script aussehen wenn ich folgendes machen will:

```

#!/bin/sh

echo blabla

echo blabla

echo Möchten Sie fortsetzen? [Yes/No]
```

----------

## Beforegod

```

echo bla

echo bla

echo fortsetzen?

read temp

if [[ "${temp}" == "yes" ]]; then echo Ok; fi

```

----------

## blu3bird

Geht auch ohne Enter.

y drücken = ja

enter drücken = ja

irgendwas anderes drücken = nein

```
#!/bin/bash

echo "blabla"

echo "blabla"

echo -n "Möchten Sie fortsetzen? [Y/n] "

read -n 1 antwort

##damit die ausgabe halbwegs formatier aussieht

if [ "${antwort}" != "" ]

then

        echo ""

fi

if [ "${antwort}" = "" ] || [ "${antwort}" = "y" ]

then

        ##mach irgendwas sinnvolles

        echo "ja"

else

        echo "wohl heute keine lust, wa?"

        exit 1

fi
```

----------

## 3PO

Genau das habe ich gesucht,

Danke Euch.

cu

3PO

----------

## 3PO

Jetzt muß ich Euch doch nochmal belästigen...  :Laughing: 

An dieser Stelle soll das script fortgesetzt werden:

 *Quote:*   

> ##mach irgendwas sinnvolles 

 

Wie müßte den der Eintrag dann aussehen?

----------

## manuels

Einfach die '##'-Zeile durch deine Kommandos ersetzen, oder was meinst du?

----------

## think4urs11

hat ja eher allgemeinen Charakter daher Deutsches Forum (German) -> Diskussionsforum.

----------

## 3PO

 *manuels wrote:*   

> Einfach die '##'-Zeile durch deine Kommandos ersetzen, oder was meinst du?

 

Habs dann auch gefunden.

Ich stand da wohl etwas auf der Leitung.   :Embarassed: 

Allerdings ist mir aufgefallen, das bei dem Script von blu3bird bei jeder Eingabe abgebrochen wird, außer bei "Y".

Gibt es dafür auch noch eine Lösung?

----------

## 3PO

Ich habe mir mal gerade /usr/bin/emerge angesehen,

und folgendes gefunden:

```
def userquery(prompt, responses=None, colours=None):

   """Displays a prompt and a set of responses, then waits for a response

   which is checked against the responses and the first to match is

   returned.  An empty response will match the first value in responses.  The

   input buffer is *not* cleared prior to the prompt!

   prompt: a String.

   responses: a List of Strings.

   colours: a List of Functions taking and returning a String, used to

   process the responses for display. Typically these will be functions

   like red() but could be e.g. lambda x: "DisplayString".

   If responses is omitted, defaults to ["Yes", "No"], [green, red].

   If only colours is omitted, defaults to [bold, ...].

   Returns a member of the List responses. (If called without optional

   arguments, returns "Yes" or "No".)

   KeyboardInterrupt is converted to SystemExit to avoid tracebacks being

   printed."""

   if responses is None:

      responses, colours = ["Yes", "No"], [green, red]

   elif colours is None:

      colours=[bold]

   colours=(colours*len(responses))[:len(responses)]

   print bold(prompt),

   try:

      while True:

         response=raw_input("["+"/".join([colours[i](responses[i]) for i in range(len(responses))])+"] ")

         for key in responses:

            # An empty response will match the first value in responses.

            if response.upper()==key[:len(response)].upper():

               return key

         print "Sorry, response '%s' not understood." % response,

   except (EOFError, KeyboardInterrupt):

      print "Interrupted."

      sys.exit(1)

```

Wenn ich so etwas hinbekommen könnte, das währe natülich die absolute Spitze.

----------

## Anarcho

Aber dir ist schon klar das das ein python Script und kein Bash-Skript ist? Mit perl, python , php usw. ist das alles kein Problem. Oder nimm gleich C/C++.

Man muss nur wissen was man braucht und welches Werkzeug. Wenn dein Script ein Python Script wird kannst du den Teil aus emerge auch klauen.

----------

## 3PO

So weit wollte ich nicht gehen, denn von C, Perl, python, - und wie die die ganzen Sprachen alle heißen, habe ich wenig, besser gesagt, überhaupt keinen Ahnung.   :Embarassed: 

Da bei emerge, im Prinzip genau diese Abfrage kommt, die ich mir vorstelle, dachte eben, ich schaue mir das mal an.

Daß das natürlich so einen riesen Aufwand mit sich bringt, hätte ich nicht gedacht.........

Ich will einfach nur ein einfaches Shell-script mit einer Sicherheitsabfrage versehen.

Bsp:

Diese Script installiert blabala.........

Möchten Sie fortsetzten [Ja/Nein]

----------

## firefly

hmm schau dir mal etc-update an eventuell ist das ein shell-script

----------

## STiGMaTa_ch

 *3PO wrote:*   

> Ich will einfach nur ein einfaches Shell-script mit einer Sicherheitsabfrage versehen.
> 
> Bsp:
> 
> Diese Script installiert blabala.........
> ...

 

Sowas?

```
#!/bin/bash

schlaufe=0

while [ $schlaufe -eq 0 ]

do

        echo -en 'Moechten Sie fortsetzen? [Ja/Nein]: '

        read entscheidung

        echo -en "\n"

        case $entscheidung in

                [jJ][aA]|[jJ])  echo "Super, dann machen wir gleich weiter."

                                schlaufe=1 ;;

                [nN][eE][iI][nN]|[nN])  echo "Okay, dann halt nicht...."

                                        exit 1 ;;

                *) echo "Bitte geben Sie Ja oder Nein ein."

                   schlaufe=0;;

        esac

done

echo "hier geht es weiter"

exit 0

```

Lieber Gruss

STiGMaTa

----------

## 3PO

@ STiGMaTa_ch,

Super, das wird ja immer besser, jetzt fehlt nur noch eine Anzeige:

Bitte geben Sie Ja ein um fortzufahen, oder nein um abzubrechen.

wenn eine andere Taste als <J> oder <N> gedrückt wird.

Danke erstmal, das hat mit doch ein ganzes Stück weitergeholfen.

----------

## kadeux

 *3PO wrote:*   

> ...jetzt fehlt nur noch eine Anzeige ... wenn eine andere Taste als <J> oder <N> gedrückt wird.

 

Ist doch schon da:

 *STiGMaTa_ch wrote:*   

> ..
> 
>                 *) echo "Bitte geben Sie Ja oder Nein ein."
> 
>                    schlaufe=0;;
> ...

 

Falls die Lektüre der manpage zur bash zu umfangreich sein sollte, ist vielleicht die folgende Webseite mit Erklärungen zu read und case hilfreich:

http://linuxseiten.kg-it.de/index.php?index=bash_Lektion_7

----------

## 3PO

Ooohps,........   :Embarassed: 

das habe ich in der Eile ganz übersehen.

Danke nochmal.   :Very Happy: 

----------

## sirro

Suche auch mal was. Komme ich irgendwie eleganter an die mtime als so?

```
ls ${i} -dl --time-style +%Y-%m-%d|awk '{ print $6 }'
```

----------

## Necoro

 *sirro wrote:*   

> Suche auch mal was. Komme ich irgendwie eleganter an die mtime als so?
> 
> ```
> ls ${i} -dl --time-style +%Y-%m-%d|awk '{ print $6 }'
> ```
> ...

 

```
stat -c "%y" $file
```

das gibt das als UTC-Timestamp zurück ... mit "%Y" bekommst du es in sekunden seit 1970  :Smile: 

----------

## sirro

Danke, aber das hilft mir nicht so sehr. Ich brauche die Zeit nach meiner eigenen Regel formatiert und das geht mit stat irgendwie nicht. Durch date jagen bekomme ich nicht hin, wäre aber auch nicht soo viel eleganter IMHO.

(Aber stat war der Befehl, an den ich gedachte hatte, der mir aber nicht eingefallen ist  :Smile: )

EDIT: hab die option für Date gefunden.

```
date -d @$(stat -c "%Y" $file) +%Y-%m-%d
```

Damit wird es doch schöner. Danke  :Smile: 

----------

## think4urs11

hmm, hast den date schon gefunden...

der Vollständgkeit wegen, mittels awk ginge es wie folgt 

```
stat -c "%Y" foo.bar |  awk '{ printf "%s\n", strftime("%F", $1) }'
```

----------

