ubuntuusers.de

Befehl im Hintergrund ausführen

Status: Ungelöst | Ubuntu-Version: Server 12.04 (Precise Pangolin)
Antworten |

marcogl

Anmeldungsdatum:
7. Januar 2016

Beiträge: Zähle...

Hallo Leute,

ich würde gerne einen Befehl im Hintergrund ausführen lassen ( was ich schon weis)

Nur soll der Hintergrund Befehl die ausgabe in ein Array schreiben, damit ich damit weiter arbeiten kann wenn der Befehl fertig ist.Nur leider zeigt er mir das nicht an

Hier mein Code:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
#!/bin/bash
ausgabe_array =($(find /usr/sap -type d -name SYS | egrep -i '^/usr/sap/[ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789]{3}/SYS$'))& 


tput civis
while [ `ps -e | grep ${!} | cut -d" " -f2` ]; do
  echo -en "\r |"  ; sleep 1
  echo -en "\r /"  ; sleep 1
  echo -en "\r -" ; sleep 1
  echo -en "\r \\"  ; sleep 1
	echo -en "\r |"  ; sleep 1


done
echo -en "\r"
tput cnorm
echo $ausgabe_array
echo "Bin wieder da! "

Bearbeitet von Developer92:

Codeblock…

misterunknown Team-Icon

Ehemalige
Avatar von misterunknown

Anmeldungsdatum:
28. Oktober 2009

Beiträge: 4403

Wohnort: Sachsen

rklm Team-Icon

Projektleitung

Anmeldungsdatum:
16. Oktober 2011

Beiträge: 13174

Herzlich willkommen hier im Portal!

marcogl schrieb:

Nur soll der Hintergrund Befehl die ausgabe in ein Array schreiben, damit ich damit weiter arbeiten kann wenn der Befehl fertig ist.Nur leider zeigt er mir das nicht an

Ja, das geht auch nicht: sobald Du den Befehl in den Hintergrund schickst, läuft er unabhängig von der aktuellen Shell und kann nicht in eine Variable der Vordergrund-Shell schreiben.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
#!/bin/bash
ausgabe_array =($(find /usr/sap -type d -name SYS | egrep -i '^/usr/sap/[ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789]{3}/SYS$'))& 


tput civis
while [ `ps -e | grep ${!} | cut -d" " -f2` ]; do
  echo -en "\r |"  ; sleep 1
  echo -en "\r /"  ; sleep 1
  echo -en "\r -" ; sleep 1
  echo -en "\r \\"  ; sleep 1
	echo -en "\r |"  ; sleep 1


done
echo -en "\r"
tput cnorm
echo $ausgabe_array
echo "Bin wieder da! "

Deute ich das richtig, dass Du so eine Art Fortschrittsanzeige realisieren willst? Dein Beispiel realisierst Du besser mit einer temporären Datei, die Du dann am Ende ausgibst.

Die Suche mit find und egrep kannst auch auch noch etwas besser machen:

1
find /usr/sap -regextype posix-egrep -type d -regex '/usr/sap/[a-zA-Z0-9]{3}/SYS'

Man kann dann noch ein wenig Redundanz loswerden.

Eine komplette Lösung könnte so aussehen:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
#!/bin/sh

tmp=$(tempfile)
trap 'rm "$tmp"' 0

find /usr/sap -regextype posix-egrep -type d -regex '/usr/sap/[a-zA-Z0-9]{3}/SYS' >|"$tmp" &
pid=$!

while kill -0 $pid 2>/dev/null; do
  for s in "\r |" "\r /" "\r -" "\r \\"; do
    echo -en "$s"
    sleep 1
  done
done

cat "$tmp"

misterunknown schrieb:

https://wiki.ubuntuusers.de/nohup/

Eher nicht: man will den Hintergrundprozess in diesem Fall ja nicht laufen lassen, wenn das Terminal verschwindet.

anrub

Avatar von anrub

Anmeldungsdatum:
4. Januar 2013

Beiträge: 336

Hallo rklm,

Eine Frage zum regex im find Befehl

1
find /usr/sap -regextype posix-egrep -type d -regex '/usr/sap/[a-zA-Z0-9]{3}/SYS'

Wenn ich den regex so gestalte, das nur A-Z gefunden werden soll - also upper-case Buchstaben - dann wird dennoch mixed-cases gefunden.

also effektiv ist bei mir

1
2
3
4
5
6
7
8
find . -regextype posix-egrep -type d -regex '\./[a-zA-Z0-9]{3}'
./ABC
./git
./AB1
./A1V
./A1c
./pwn
./jd2

äquivalent zu

1
2
3
4
5
6
7
8
find . -regextype posix-egrep -type d -regex '\./[A-Z0-9]{3}'
./ABC
./git
./AB1
./A1V
./A1c
./pwn
./jd2

Woran könnte das liegen?

Grüße anrub

rklm Team-Icon

Projektleitung

Anmeldungsdatum:
16. Oktober 2011

Beiträge: 13174

anrub schrieb:

Eine Frage zum regex im find Befehl

Wenn ich den regex so gestalte, das nur A-Z gefunden werden soll - also upper-case Buchstaben - dann wird dennoch mixed-cases gefunden.

Woran könnte das liegen?

Potzblitz! Bei mir auch:

1
2
3
4
5
$ mkdir 123 abc defg HIJ Klm
$ find . -regextype posix-egrep -type d -regex '\./[A-Z0-9]{3}'
./HIJ
./Klm
./123

Vielleicht an einem Bug? Anders kann ich es mir nicht erklären.

user_unknown

Avatar von user_unknown

Anmeldungsdatum:
10. August 2005

Beiträge: 17604

Wohnort: Berlin

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
> ls ??
ay  AY  az  AZ  bz  bZ
> find . -regextype posix-egrep -regex '\./[A-Z]{2}'
./bz
./AY
./bZ
./AZ
> LC_ALL=C find . -regextype posix-egrep -regex '\./[A-Z]{2}'
./AY
./AZ

Das ist die schwachmatöse Sortierung nach Sekretär- und Schriftstellermode (wer hat die an den PC gelassen?), also AaBbCc...Zz. Wie im Duden, nicht wie in der ASCII-Tabelle, erfunden von wem? K&R? von Neumann?

LC_ALL=C ist hier der Freund, füŕ Leute, die es genauer diskriminieren wollen, LC_COLLATE soweit ich weiß.

Die Tücke dabei ist, dass man wissen muss, ob nun A vor a ist oder umgekehrt, man also find . -regextype posix-egrep -regex '\./[a-Z]{2}' oder '\./[A-z]{2}' braucht, wenn man beides will. Dabei hat man ja schon iregex oder iname, wenn man Ignorant ist und :isalpha: oder so ähnlich.

rklm Team-Icon

Projektleitung

Anmeldungsdatum:
16. Oktober 2011

Beiträge: 13174

user_unknown schrieb:

Das ist die schwachmatöse Sortierung nach Sekretär- und Schriftstellermode (wer hat die an den PC gelassen?), also AaBbCc...Zz. Wie im Duden, nicht wie in der ASCII-Tabelle, erfunden von wem? K&R? von Neumann?

Du meinst, dass A-Z in Deiner Locale auch die Kleinbuchstaben umfasse? Aua, das ist ja ätzend!

LC_ALL=C ist hier der Freund, füŕ Leute, die es genauer diskriminieren wollen, LC_COLLATE soweit ich weiß.

👍

Die Tücke dabei ist, dass man wissen muss, ob nun A vor a ist oder umgekehrt, man also find . -regextype posix-egrep -regex '\./[a-Z]{2}' oder '\./[A-z]{2}' braucht, wenn man beides will. Dabei hat man ja schon iregex oder iname, wenn man Ignorant ist und :isalpha: oder so ähnlich.

Ja, das ist wirklich blöd gemacht. Danke für die Aufklärung!

Seebär

Avatar von Seebär

Anmeldungsdatum:
2. Mai 2009

Beiträge: 833

rklm schrieb:

Ja, das ist wirklich blöd gemacht. Danke für die Aufklärung!

Zur Ergänzung: das gilt nicht nur dort, ruf mal

sort --help

und delektiere dich an dem unteren Hinweis:

*** WARNUNG ***
Die eingestellte Locale beeinflusst die Sortierreihenfolge.
Setzen Sie LC_ALL=C, um die traditionelle Sortierreihenfolge zu aktivieren, bei
der native Bytewerte verwendet werden.

Hat mich schon 1x Nerven gekostet das als Ursache eines "Fehlers" (der keiner war) herauszufinden.

Antworten |