Kommandozeilenparameter unverändert weitergeben

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
Benutzeravatar
king-crash
Beiträge: 740
Registriert: 08.08.2006 12:07:56
Lizenz eigener Beiträge: MIT Lizenz

Kommandozeilenparameter unverändert weitergeben

Beitrag von king-crash » 27.08.2024 08:33:05

Hallo,

Ich habe ein Shellskript (bash) bei dem einer der Komandozeilenparameter unverändert an ein aufgerufenes Programm weitergegeben werden soll. Das Problem ist, dass darin beliebige Sonderzeichen vorkommen können.
Gibt es eine Möglichkeit diesen Parameter unverändert für einen Programmaufruf zu verwenden?

Im Wesentlichen soll also ein Testskript

Code: Alles auswählen

#!/bin/bash
echo "$1"
Mit dem Aufruf: bash test.sh #"'abc
auch #"'abc ausgeben.

Grüße

Benutzeravatar
MSfree
Beiträge: 11605
Registriert: 25.09.2007 19:59:30

Re: Kommandozeilenparameter unverändert weitergeben

Beitrag von MSfree » 27.08.2024 08:54:17

# wird von der bash als Einleitung eines Kommentars interpretiert. Auch das " hat eine Sonderbedeutung. Beider Zeichen mußt du mit dem Escapezeichen \ einleiten. Die Hochkommans " helfen hier wenig, weil "#"'abc" die mit Hochkommas eingefaßten Zeichenketten am zweiten Hochkomma beenden würden.

Wenn du dein Skript also mit Sonderzeichen starten willst, mußt du sie so escapen:

Code: Alles auswählen

\#\"abc

Benutzeravatar
king-crash
Beiträge: 740
Registriert: 08.08.2006 12:07:56
Lizenz eigener Beiträge: MIT Lizenz

Re: Kommandozeilenparameter unverändert weitergeben

Beitrag von king-crash » 27.08.2024 09:16:10

Das Skript wir von einem externen Programm gestartet (Squid) und ich kann daher die Parameter nicht beeinflussen. Deshalb die Frage, ob sich das Skriptintern regeln lässt.

Benutzeravatar
Meillo
Moderator
Beiträge: 9241
Registriert: 21.06.2005 14:55:06
Wohnort: Balmora
Kontaktdaten:

Re: Kommandozeilenparameter unverändert weitergeben

Beitrag von Meillo » 27.08.2024 14:50:50

An sich ist die Antwort einfach: Du musst es genau so machen wie du es fuer den echo-Befehl schon machst: Einfach in Double-Quotes einfassen, dann wird der Inhalt von $1 unveraendert durchgereicht.

Siehe beispielsweise mit dem zusaetzlichen Umweg ueber eine Funktion:

Code: Alles auswählen

:-Q cat script.sh 
#!/bin/bash

printargs() {
        echo "<$1>"
}

printargs "$1"

:-Q ./script.sh '#"test'
<#"test>

:-Q 
Was ich nicht recht verstehe: Warum fragst du ueberhaupt? Das Minimalbeispiel, das du machst, tut doch schon genau das was du willst. ;-) Oder tut es das bei dir nicht? Wo genau liegt das Problem? Was genau tut nicht so wie du es willst?
Use ed once in a while!

Benutzeravatar
king-crash
Beiträge: 740
Registriert: 08.08.2006 12:07:56
Lizenz eigener Beiträge: MIT Lizenz

Re: Kommandozeilenparameter unverändert weitergeben

Beitrag von king-crash » 27.08.2024 16:16:04

Ah, wenn das bereits ausreichend ist wäre das perfekt. Ich komme Programmiersprachentechnisch von C, da bin ich bei Shellskripten immer unsicher.
Würden auch nicht druckbare Zeichen weitergegeben, also sämtliche Bytes? Das "sollte" natürlich in diesem Fall nie ankommen, nur zum Verständnis.

Benutzeravatar
Meillo
Moderator
Beiträge: 9241
Registriert: 21.06.2005 14:55:06
Wohnort: Balmora
Kontaktdaten:

Re: Kommandozeilenparameter unverändert weitergeben

Beitrag von Meillo » 27.08.2024 16:36:34

king-crash hat geschrieben: ↑ zum Beitrag ↑
27.08.2024 16:16:04
Ah, wenn das bereits ausreichend ist wäre das perfekt. Ich komme Programmiersprachentechnisch von C, da bin ich bei Shellskripten immer unsicher.
Würden auch nicht druckbare Zeichen weitergegeben, also sämtliche Bytes? Das "sollte" natürlich in diesem Fall nie ankommen, nur zum Verständnis.
Was willst du denn da durchschieben? :-D

Alle Bytes nicht -- Nul-Bytes nicht ... aber alle anderen wohl schon. ;-) Das haengt aber sicherlich von der jeweiligen Implementierung der Shell ab. Wenn du keine abstrusen Binaerspielereinen vorhast, sollten hier keine Ueberraschungen zu erwarten sein.

Notfalls kannst du mit deinem Beispiel-Shellscript ja selber rumspielen. Ggf. auch einen kleinen Unittest bauen, der random Strings erzeugt und vergleicht, ob sie gleich rauskommen wie sie reingegangen sind.
Use ed once in a while!

Benutzeravatar
king-crash
Beiträge: 740
Registriert: 08.08.2006 12:07:56
Lizenz eigener Beiträge: MIT Lizenz

Re: Kommandozeilenparameter unverändert weitergeben

Beitrag von king-crash » 27.08.2024 18:02:50

Im aktuellen Fall sind das Anfragen von einem Squid Server, da mache ich mir wenig Gedanken. Aber es gibt ja auch noch andere Anwendungsfälle.
Vielen Dank für die Info

Antworten