• Willkommen im Linux Club - dem deutschsprachigen Supportforum für GNU/Linux. Registriere dich kostenlos, um alle Inhalte zu sehen und Fragen zu stellen.

(gelöst) Befehl ersetzen klappt nicht

Hallo,

ich brauche in einem Skript öfter den folgenden Befehl:
Code:
ps aux |grep /bin/sh /usr/bin/mozilla|grep -v grep |grep BENUTZER
Dazu wollte ich den "in eine Variable packen", bzw. ersetzen, um ihn einmal im Skript zu hinterlegen, und dann nur einmal ändern zu müssen.

Die korrekte Ausgabe des Befehls wäre eine Zeile mit dem per "/bin/sh /usr/bin/mozilla" gestarteten Mozilla des Benutzers BENUTZER.

Das geht nur nicht.

Code:
BEFEHL='ps aux |grep /bin/sh /usr/bin/mozilla|grep -v grep |grep BENUTZER'
$BEFEHL

Danke im Voraus.

liefert:
ERROR: Garbage option.

Code:
BEFEHL="ps aux |grep /bin/sh /usr/bin/mozilla|grep -v grep |grep BENUTZER"
$BEFEHL

liefert
Code:
ERROR: Garbage option.

Code:
BEFEHL=`ps aux |grep /bin/sh /usr/bin/mozilla|grep -v grep |grep BENUTZER`
$BEFEHL

liefert garnix. Ein echo $BEFEHL würde hier das Ergebnis des Befehls liefern. Kann ich aber so auch nicht gebrauchen.


Ich hab schon mal probiert, das zu greppende "/bin/sh /usr/bin/mozilla" in Quotes, backticks und ... zu setzen, aber das hat alles nix geändert. Evtl. hätte ich die dann wieder escapen müssen, damit die äußeren Quotes/Backticks/.. nicht "beendet" werden.
Hat aber alles nix gebracht.

Wie müsste ich also den Befehl definieren/angeben, damit ich ihn nachher per $BEFEHL aufrufen kann?

Code:
BEFEHL=...
$BEFEHL
 
Saber_Rider schrieb:
ich brauche in einem Skript öfter den folgenden Befehl:
Code:
ps aux |grep /bin/sh /usr/bin/mozilla|grep -v grep |grep BENUTZER
Dazu wollte ich den "in eine Variable packen", bzw. ersetzen, um ihn einmal im Skript zu hinterlegen, und dann nur einmal ändern zu müssen.

mach Dir ein alias, also

Code:
alias benutzergrep='ps aux |grep /bin/sh /usr/bin/mozilla|grep -v grep |grep '
dann kannst Du das mit
Code:
$ benutzergrep foobar
aufrufen
 
Jupp, da hatte ich auch daran gedacht. Das wär aber doch schummeln ;-)

Mich packt mal wieder das Interesse, warum die Sachen oben nicht gehen. So von wegen Grundwissen und so.
 
ansonsten, wenn es in einer Variablen stehen soll,
Code:
VARIABLE="ps aux |grep /bin/sh /usr/bin/mozilla|grep -v grep |grep"

dann willst Du den Inhalt auswerten ->
Code:
$ eval "$VARIABLE foobar"

wenn der Benutzer direkt über eine andere Variable eingebunden werden soll, dann entweder so:
Code:
BENUTZER="foobar"
VARIABLE="ps aux |grep /bin/sh /usr/bin/mozilla|grep -v grep |grep $BENUTZER"

und ein
Code:
$ eval "$VARIABLE"

wenn der Benutzer erst später gesetzt wird, dann so:
Code:
VARIABLE='ps aux |grep /bin/sh /usr/bin/mozilla|grep -v grep |grep $BENUTZER'

viel später

BENUTZER="foobar"

da bei "" die Variablen sofort ersetzt werden.
 
Vielleicht hab ich die falschen Ausdrücke gewählt.
Dein erstes Beispiel ist schon mal gut, nur kann man den Befehl halt dann nicht direkt aufrufen, da es ja keinen Befehl "ps gibt. ;-(
 
ich weiß nicht was Du willst... um diesen Befehl mehrfach zu nutzen ist doch das genau das was Du willst, also Variable mit dem Konstrukt, dann ein eval auf die Variable um den Befehl auszuwerten...

wenn das nicht genau das ist, was Du Dir vorstellst, solltest Du noch mal detaillierter beschreiben was Du willst.
 
Ich werd das mal anschauen, wenn ich an der Linuxkiste sitze.

Danke dir auf jeden Fall schon mal.
 
Saber_Rider schrieb:
Code:
ps aux |grep /bin/sh /usr/bin/mozilla|grep -v grep |grep BENUTZER

*confused*

Müsste das nicht:
Code:
ps aux |grep -e /bin/sh -e /usr/bin/mozilla|grep -v grep |grep BENUTZER
oder
Code:
ps aux |grep "/bin/sh /usr/bin/mozilla" |grep -v grep |grep BENUTZER

heissen ?

Wenn grep mit "pattern (alias /bin/sh)" "file ( alias /usr/bin/mozilla )"
aufgerufen wird, wird "stdin (alias ps -ef )" ignoriert.

Haveaniceday

PS: Für mich ist die Lösung: VARIABLE="..." ; eval $VARIABLE
Ein "|" in Variablen wird aus meiner Sicht sonst nicht genutzt.
 
haveaniceday schrieb:
*confused*

Müsste das nicht:
Code:
ps aux |grep -e /bin/sh -e /usr/bin/mozilla|grep -v grep |grep BENUTZER
oder
Code:
ps aux |grep "/bin/sh /usr/bin/mozilla" |grep -v grep |grep BENUTZER

heissen ?

Du hast vollkommen recht, ich hab die Zeile mal wieder nur halb gelesen ;) wobei man bei grep "foo bar" dann in leichte Probleme mit dem Schachteln in einen gesamt-String kommt, also hier dann entweder escapen "foo bar" oder in Singlequotes respektive den gesamt-String in Single-Quotes packen.


PS: Für mich ist die Lösung: VARIABLE="..." ; eval $VARIABLE
Ein "|" in Variablen wird aus meiner Sicht sonst nicht genutzt.
auch bei VAR='...' wird bei dem eval entsprechend die Pipe abgearbeitet, das ist nciht das Problem
 
Aussage sollte sein _nur_ bei einem eval wird eine Pipe ausgewertet:
Code:
haveaniceday~> VAR="echo hier bin ich | grep hier"
haveaniceday~> $VAR
hier bin ich | grep hier
 
TeXpert schrieb:
ah, jetzt ja :) dann sind wir ja einer Meinung...

Und ich glücklicherweise auch. Hat etwas länger gedauert, aber ich habs probiert, und es klappt.

Also danke an alle für die Anregung und die Hilfe.

Ich wusste auf euch ist Verlass ;-)
 
Oben