Option mit Leerzeichen in /etc/default/service geht nicht
Option mit Leerzeichen in /etc/default/service geht nicht
Hallo,
bei manchen Services gibt es in /etc/default/ eine gleichnamige Datei, in der man Startoptionen angeben kann. Allerdings, was macht man, falls die Option ein Leerzeichen enthalten soll.
Ich spreche von folgender Situation:
/etc/default/service:
OPTIONS="--flag1 --text=A B"
/etc/init.d/service:
....
/sbin/service $OPTIONS
Dabei übergibt die Bash dem Service folgende Parameter "--flag1", "--text=A" und "B". Für das Beispiel soll es aber offensichtlich möglich sein, den Parameter "--text=A B" zu übergeben. Leider kann man dazu nicht einfach nur Anführungszeichen oder Escape-Sequenzen hinzufügen, da die nach der Substitution beim Start nicht mehr interpretiert werden.
Geht das tatsächlich nicht oder weiß jemand eine Lösung? (Natürlich jeweils ohne /etc/init.d/service zu verändern.)
Gruß
Rupert
bei manchen Services gibt es in /etc/default/ eine gleichnamige Datei, in der man Startoptionen angeben kann. Allerdings, was macht man, falls die Option ein Leerzeichen enthalten soll.
Ich spreche von folgender Situation:
/etc/default/service:
OPTIONS="--flag1 --text=A B"
/etc/init.d/service:
....
/sbin/service $OPTIONS
Dabei übergibt die Bash dem Service folgende Parameter "--flag1", "--text=A" und "B". Für das Beispiel soll es aber offensichtlich möglich sein, den Parameter "--text=A B" zu übergeben. Leider kann man dazu nicht einfach nur Anführungszeichen oder Escape-Sequenzen hinzufügen, da die nach der Substitution beim Start nicht mehr interpretiert werden.
Geht das tatsächlich nicht oder weiß jemand eine Lösung? (Natürlich jeweils ohne /etc/init.d/service zu verändern.)
Gruß
Rupert
-
- Beiträge: 827
- Registriert: 26.05.2008 12:04:54
- Lizenz eigener Beiträge: GNU Free Documentation License
- Wohnort: Nörten-Hardenberg
-
Kontaktdaten:
Re: Option mit Leerzeichen in /etc/default/service geht nicht
Bin leider kein Bashskripter aber du könntest versuchen folgendes zu machen.
OPTIONS="--flag1 --text=\"A B\""
Ob dies geht weiß ich leider nicht
Martin
OPTIONS="--flag1 --text=\"A B\""
Ob dies geht weiß ich leider nicht
Martin
Es gibt keine if Schleife -> http://www.if-schleife.de/
Ansonsten GPL/GNU/Linux/Debian/Free Software 4 Ever
Ansonsten GPL/GNU/Linux/Debian/Free Software 4 Ever
Re: Option mit Leerzeichen in /etc/default/service geht nicht
Hallo Martin,
wie ich schon geschrieben habe, geht es nicht einfach nur mit Anführungszeichen und Escape-Sequenzen. Denn \" wird zwar bei der Deklaration noch zu ", aber "A B" wird beim Starten des Service nicht mehr zu einem Parameter, sondern zu zweien, nämlich "A und B", sprich die Anführungszeichen werden nicht mehr interpretiert.
wie ich schon geschrieben habe, geht es nicht einfach nur mit Anführungszeichen und Escape-Sequenzen. Denn \" wird zwar bei der Deklaration noch zu ", aber "A B" wird beim Starten des Service nicht mehr zu einem Parameter, sondern zu zweien, nämlich "A und B", sprich die Anführungszeichen werden nicht mehr interpretiert.
- novalix
- Beiträge: 1909
- Registriert: 05.10.2005 12:32:57
- Lizenz eigener Beiträge: MIT Lizenz
- Wohnort: elberfeld
Re: Option mit Leerzeichen in /etc/default/service geht nicht
Hi,
schon mal mit Hochkommata probiert?
Groetjes, niels
schon mal mit Hochkommata probiert?
Code: Alles auswählen
OPTIONS="--flag1 --text='A B'"
Das Wem, Wieviel, Wann, Wozu und Wie zu bestimmen ist aber nicht jedermannns Sache und ist nicht leicht.
Darum ist das Richtige selten, lobenswert und schön.
Darum ist das Richtige selten, lobenswert und schön.
Re: Option mit Leerzeichen in /etc/default/service geht nicht
Hallo Niels,
ja, die werden ebenfalls nicht interpretiert. Ihr könnt das übrigens leicht selbst in der Bash testen: D="\"A B\"";ls $D gibt
ls: cannot access "A: No such file or directory
ls: cannot access B": No such file or directory
aus und ich will
ls: cannot access A B: No such file or directory
erreichen.
ja, die werden ebenfalls nicht interpretiert. Ihr könnt das übrigens leicht selbst in der Bash testen: D="\"A B\"";ls $D gibt
ls: cannot access "A: No such file or directory
ls: cannot access B": No such file or directory
aus und ich will
ls: cannot access A B: No such file or directory
erreichen.
Re: Option mit Leerzeichen in /etc/default/service geht nicht
Darf man fragen welcher Service das überhaupt so abfragt? - und wenns ein eigener Service ist, warum du das nicht einfach unter /init.d ins Skript packst.
Re: Option mit Leerzeichen in /etc/default/service geht nicht
Hallo,
bei mir sind einige installiert, die das so machen:
Einen konkreten Service, bei dem ich einen Parameter mit Leerzeichen übergeben können muss, gibt es übrigens nicht, falls du das wissen wolltest.
bei mir sind einige installiert, die das so machen:
Code: Alles auswählen
./hal:DAEMON_OPTS=
./ntp:NTPD_OPTS='-g'
./ssh:SSHD_OPTS=
./nfs-kernel-server:RPCMOUNTDOPTS="-p 32767"
./nfs-kernel-server:RPCSVCGSSDOPTS=
./rsync:RSYNC_OPTS=''
./fail2ban:FAIL2BAN_OPTS=""
./nfs-common.ucf-old:STATDOPTS="--port 32765 --outgoing-port 32766"
./postgrey:POSTGREY_OPTS="--inet=127.0.0.1:60000"
./nfs-common:STATDOPTS=
./nfs-kernel-server.ucf-old:RPCMOUNTDOPTS="-p 900"
./prelink:PRELINK_OPTS=-mR
Re: Option mit Leerzeichen in /etc/default/service geht nicht
Ich dachte immer, dass reicht mit dem Backspace, wieder was gelernt.
Ich hab kurz gegoogelt (nach bash variable leerzeichen) und die Lösung gefunden. Du musst beim Aufruf der Variable die Variable auch unter Anführungszeichen setzen und die Escape-Zeichen kannst du vergessen. Also
und beim Abruf
Ich hab kurz gegoogelt (nach bash variable leerzeichen) und die Lösung gefunden. Du musst beim Aufruf der Variable die Variable auch unter Anführungszeichen setzen und die Escape-Zeichen kannst du vergessen. Also
Code: Alles auswählen
D="A B"
Code: Alles auswählen
ls "$D"
Debians Paketbeschreibungen übersetzen? Hilf mit!
Re: Option mit Leerzeichen in /etc/default/service geht nicht
Hallo deberik,
das ls $D steht für den Aufruf des Services innerhalb des Startskripts und eben den möchte ich ja nicht verändern müssen. Mittlerweile glaube ich jedoch, dass es nur durch das Ändern des Werts der Variable gar nicht möglich ist. Zumindest habe ich nun einen scheinbar passenden Abschnitt in der Manpage von Bash gefunden:
das ls $D steht für den Aufruf des Services innerhalb des Startskripts und eben den möchte ich ja nicht verändern müssen. Mittlerweile glaube ich jedoch, dass es nur durch das Ändern des Werts der Variable gar nicht möglich ist. Zumindest habe ich nun einen scheinbar passenden Abschnitt in der Manpage von Bash gefunden:
Insbesondere werden in dem Abschnitt keine vom Wert der Variable abhängigen Außnahmen erwähnt, bei denen die Wörter nicht gesplittet werden. Demnach scheint es keine Möglichkeit zu geben, das Wordsplitting durch irgendwelche Änderungen am Wert der Variable zu beeinflussen.Word Splitting
The shell scans the results of parameter expansion, command substitution, and
arithmetic expansion that did not occur within double quotes for word split‐
ting.