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:
| 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.