Zum Inhalt springen

BASH: Funktion zum Maskiren von Befehlen ?


geist_der_foren

Empfohlene Beiträge

Hi @all,

weiß jemand ob es eine Funktion gibt um Befehle zu maskieren ?

Ich hab ein Skript, dem man als Parameter ein befehl mit geben kann z.B.:

/usr/sbin/useradd -u 1000 -d /home/username -c "Vorname Name" -m username 
Dieser Befehl wird in einer schleife gepackt,die dann in einer anderen Datei Befehle generiert. Von der generierten Datei werden dann die die generierten Befehle ausgeführt. Das heißt der oben genannte befehl muss zwei mal Maskiert werden
/usr/sbin/useradd -u 1000 -d /home/username -c "\\"\" Vorname Name \\"\"" -m username 

Gibt es eine Funktion, die ich ihn mein Skript einfügen kann, die mir die Maskierung abnimmt ???

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hallo,

Original geschrieben von geist_der_foren

Gibt es eine Funktion, die ich ihn mein Skript einfügen kann, die mir die Maskierung abnimmt ???

Ja, du kannst Dir den String beispielsweise einfach mittels "echo" zusammenbauen und dann in die Datei schreiben oder direkt ausführen.

Nic

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hallo,

Vielleicht habe ich die Frage auch nicht so ganz verstanden:

echo \""\\"\\\"\\\" ergibt beispielsweise "\\"\". Damit kannst Du dir die benötigten Strings zusammenbauen.

Sofern Du innerhalb des eingegebenen Strings die Quotes entsprechen ersetzen willst (und den string nicht aus Einzelteilen zusammensetzen kannst), ist beispielswese der sed das geeignete Tool. Damit läßt sich relativ ein Pattern Matching mit der entsprechende Ersetzung erledigen.

Nic

Link zu diesem Kommentar
Auf anderen Seiten teilen

Original geschrieben von nic_power

Hallo,

Warum? mit sed lassen sich auch problemlos alle Vorkommen eines Patterns innerhalb einer Zeile ersetzen:

sed 's/n/x/g'

ersetzt alle "n" innerhalb einer Zeile durch ein "x".

Nic

Aber wie soll ich das genau machen ??? Ich verstehe da immer noch nicht :confused:

Also gehen wir mal von meinen Beispiel aus.

beim aufruft des Skriptes muss man z.B. als Parameter "Name Vorname" mit geben.

Jetzt muss "Name Vorname" durch 2 Dateien durch !

Ich muss es folglich dann so maskieren

"\\"\"Vorname Name\\"\""

Wie kann ich das jetzt mit dem sed machen ? Da gibt es halt noch ein Prob, es kann ja mal sein, dass ein anders Konstrukt da gestellt werden möchte jetzt mal ein blödes Beispiel ""Name Vorname"" wie maskiere ich das dann ? Das meinte ich mit Dynamisch ...

Link zu diesem Kommentar
Auf anderen Seiten teilen

Original geschrieben von nic_power

Hallo,

Warum? mit sed lassen sich auch problemlos alle Vorkommen eines Patterns innerhalb einer Zeile ersetzen:

sed 's/n/x/g'

ersetzt alle "n" innerhalb einer Zeile durch ein "x".

Nic

Ja das natürlich ja...sorry ich hab mich falsch Ausgedrückt...ich hatte hier das immer vergessen:

Original geschrieben von Schlaubi

das ist sehr schwierig...ob möglich oder nicht, kann ich nicht sagen...aber es ist nicht einfach...weil du kannst immer nur auf einen pattern eine ersetzung anwenden...

....egal ob alle patterns ersetzt werden oder nicht...

Original geschrieben von geist_der_foren

Aber wie soll ich das genau machen ??? Ich verstehe da immer noch nicht :confused:

Da gibt es halt noch ein Prob, es kann ja mal sein, dass ein anders Konstrukt da gestellt werden möchte jetzt mal ein blödes Beispiel ""Name Vorname"" wie maskiere ich das dann ? Das meinte ich mit Dynamisch ...

und ich hab mir soetwas schon gedacht....wie gesagt das ist schwierig...weil du nicht nur einen Pattern abfangen musst, sondern alle die Möglich sein könnten....und "vorauszuskripten" macht eigentlich keinen Sinn.....wie schon gesagt..mir ist nichts anderes bekannt (bitte schlagt mich wenn das nicht so ist)...außer ein aufwendiges Skript mit allen mögl. Fällen zu erstellen...

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hallo,

schlagen möchte ich Dich natürlich nicht. Aber die regexp auf denen sed basiert sind sehr mächtig. Es ist somit auch möglich, eine Regular Expression zu bilden, die zwar bei einem einfachen Auftreten des " dieses ersetzt, bei einem doppelten Auftreten ("") nur das erste Zeichen (bzw. das letzte, sofern diese paarweise auftreten). Um eine Antwort zu posten, müsste man allerdings die möglichen Kombinationen kennen, die auftreten können (ohne eine genaue Definition des Problems wird es aber generell keine allgemeingültige Lösung geben).

Das Hauptproblem bei den regexp ist, dass sie ab einer bestimmten Komplexität dazu neigen, "write only" zu sein. GGf. ist dann ein Ausweichen auf Alternativen wie awk sinnvoll (wg. der Verständlichkeit des Codes).

Nic

Link zu diesem Kommentar
Auf anderen Seiten teilen

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...