/bin/sh-Script, Ermittlung Vaterprozess [gelöst]

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
nil
Beiträge: 989
Registriert: 08.06.2005 13:28:36

/bin/sh-Script, Ermittlung Vaterprozess [gelöst]

Beitrag von nil » 24.03.2006 11:19:04

Hallo,
vielleicht ist der Titel nicht ganz so gut, aber ich will eben erklären, was ich versuche.

Ich habe ein Shellscript geschrieben, welches sowohl direkt von einem angemeldeten Benutzer (bash) als auch als Shell (Eintrag in /etc/passwd) aufrufbar sein soll.

Es funktioniert für beide Fälle. Nur bei dem Aufruf über Bash übergebe ich einen Parameter als Wert ($1), beim Aufruf als Shell verlange ich eine Eingabe dieses Parameters nach der Anmeldung.

Aus Administrationsgründen möchte ich gerne beides in einer Datei zusammenfassen. Durch eine "if-Abfrage" ist das möglich, nur leider weiss ich nicht, ob

1.) der Vaterprozess sshd ist
2.) der Vaterprozess bash ist

Wie realisiert man diese Abfrage. Im Internet habe ich dazu nichts gefunden.
Zuletzt geändert von nil am 24.03.2006 11:51:56, insgesamt 1-mal geändert.

gms
Beiträge: 7798
Registriert: 26.11.2004 20:08:38
Lizenz eigener Beiträge: MIT Lizenz

Beitrag von gms » 24.03.2006 11:32:08

Die Prozess ID des Vaters erhältst du über die Environmentvariable PPID und durch suchen in der Prozessliste kannst du den Vaterprozeß herausfinden.

Aber ist das wirklich notwendig ? geht das nicht so auch:

Code: Alles auswählen

PARAM1=$1
if [ -z "$PARAM1" ]; then
  echo "Please enter the value for PARAM1:"
  read PARAM1
fi
Gruß
gms

nil
Beiträge: 989
Registriert: 08.06.2005 13:28:36

Beitrag von nil » 24.03.2006 11:51:40

Hallo,
danke für die Antwort. Das funktioniert leider nicht, da das Programm auch ohne Übergabeparameter funktionieren soll.

Aber ich habe eine viel bessere Lösung gefunden:

Code: Alles auswählen

if [ "$SHELL" != "/bin/bash" ]; then                            
da die Shell ja nicht Bash ist, funktioniert diese Abfrage.

roli
Beiträge: 3174
Registriert: 10.09.2003 17:39:58

Beitrag von roli » 24.03.2006 12:06:46

Hi,

auch wenn du mittlerweile eine Loesung gefunden hast, vielleicht hilft dir ja ein Script das ich letztens geschrieben habe trozdem.

Code: Alles auswählen

#!/usr/bin/sh
#set -x
# ----------------------------------------------
# ps2r.sh - ps to root
# ----------------------------------------------
# erstellt von:   roli
#           am:   29.12.2005
# ----------------------------------------------
# geaendert von:
#            am:
# ----------------------------------------------
# Input: PID des Prozesses, der "getracked" werden
#   soll, und die Anzahl der Rekursionen, wenn gewuenscht
# ----------------------------------------------
# Beschreibung:
#   Dieses Script gibt auf STDOUT Informationen
#   ueber einen belibigen Prozess und seine Eltern
#   aus, bis zum "Root" Prozess.
#

rekursion=0

if [ "$#" -eq 0 -o "$#" -gt 2 ]
then
  echo "Usage: $0 PID <Number of rekursion: OPTIONAL>"
  exit 1
fi

if [ "$1" -gt 0 ]
then
  startpid=$1
else
  echo "PID must be numeric"
  exit 1
fi

if [ "$#" -eq 2 ]
then
  anz_rekursion=$2
  my_exp='[ "$rekursion" -lt "$anz_rekursion" ]'
else
  anz_rekursion=0
  my_exp='[ "$startpid" -ne 0 ]'
fi

ueberschrift=`ps -eaf|head -1`
echo "$ueberschrift"

while `eval $my_exp`
do
  myppid=`ps -eaf|nawk -v pid=$startpid '{if($2==pid) print $3}' `
  process=`ps -eaf|nawk -v pid=$startpid '{if($2==pid) print $0}'`
  startpid=$myppid
  echo "$process"
  rekursion=`echo "$rekursion+1"|bc`
done 
Roland


"Aber wenn du schon so unwissend bist, davon noch nicht gehört zu haben,
so will ich es doch als gut ansehen, daß du lieber einmal töricht fragst,
als weiterhin nichts von etwas zu wissen, das man doch wissen sollte."
aus "Die Edda des Snorri Sturluson", "Gylfis Täuschung"

Antworten