Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Frage zum echo-Kommando

9 views
Skip to first unread message

Uwe Premer

unread,
Apr 11, 2012, 7:33:40 AM4/11/12
to
Für ein Script benötige ich folgende Ausgabe:

echo "X-Face:
Ai+CK3C=Y%,3@@qT0GY9cJq2t}d5f.@C=*Ra%\\Hz4HCQR(FthsbbQ0JdfNd\|
b4msVp`!)PT$#>mN[Dh2=IEJ>NEUB"(^N=iq~H+3)zeVhZG.xJ6*gHvHpUg,h:@nUo'l-(Eq5f}zGXy%Cs(8hXB8=;~n2wWqqOor-
Mony`'q+d3:K@O3e-n~,x3"

(alles in einer Zeile!)

Eigentlich ganz easy: der in " eingeschlossene Text soll angezeigt
werden.
Allerdings ergibt sich dieser Fehler in der bash:

~> echo "X-Face:
Ai+CK3C=Y%,3@@qT0GY9cJq2t}d5f.@C=*Ra%\\Hz4HCQR(FthsbbQ0JdfNd\|
b4msVp`!)PT$#>mN[Dh2=IEJ>NEUB"(^N=iq~H+3)zeVhZG.xJ6*gHvHpUg,h:@nUo'l-(Eq5f}zGXy%Cs(8hXB8=;~n2wWqqOor-
Mony`'q+d3:K@O3e-n~,x3"
bash: !: event not found

Wie kann ich exakt diesen X-Face-Text per echo in der bash anzeigen
lassen?

Uwe

Tim Landscheidt

unread,
Apr 11, 2012, 8:22:21 AM4/11/12
to
Beispielsweise mit einfachen Anführungszeichen:

| echo 'X-Face: Ai+CK3C=Y%,3@@qT0GY9cJq2t}d5f.@C=*Ra%\\Hz4HCQR(FthsbbQ0JdfNd\|b4msVp`!)PT$#>mN[Dh2=IEJ>NEUB"(^N=iq~H+3)zeVhZG.xJ6*gHvHpUg,h:@nUo'\''l-(Eq5f}zGXy%Cs(8hXB8=;~n2wWqqOor-Mony`'\''q+d3:K@O3e-n~,x3'

Deine "``" hätten auch einen Befehl
'!)PT$#>mN[Dh2=IEJ>NEUB"(^N=iq~H+3)zeVhZG.xJ6*gHvHpUg,h:@nUo'\''l-(Eq5f}zGXy%Cs(8hXB8=;~n2wWqqOor-Mony'
ausgeführt (oder es zumindest versucht).

Quoting in Shell-Scripts ist normalerweise die letzte Mo-
tivation, Perl zu lernen :-).

Tim

Thomas Rachel

unread,
Apr 11, 2012, 9:00:48 AM4/11/12
to
Am 11.04.2012 13:33 schrieb Uwe Premer:
> Für ein Script benötige ich folgende Ausgabe:
>
> echo "X-Face:
> Ai+CK3C=Y%,3@@qT0GY9cJq2t}d5f.@C=*Ra%\\Hz4HCQR(FthsbbQ0JdfNd\|
> b4msVp`!)PT$#>mN[Dh2=IEJ>NEUB"(^N=iq~H+3)zeVhZG.xJ6*gHvHpUg,h:@nUo'l-(Eq5f}zGXy%Cs(8hXB8=;~n2wWqqOor-
> Mony`'q+d3:K@O3e-n~,x3"
>
> (alles in einer Zeile!)
>
> Eigentlich ganz easy: der in " eingeschlossene Text soll angezeigt
> werden.

Da innerhalb von " immer noch das eine oder andere Zeichen eine
spezielle Bedeutung hat (auch $ gehört übrigens dazu), sollte
vorzugsweise ' verwendet werden.

Sollte dieses im umschlossenen Text verwendet werden, ist es durch '\''
oder '"'"' zu ersetzen: der aktuell geöffnete String wird geschlossen,
ein gequotetes ' wird angehängt und ein neuer String geöffnet.

Alternativ können auch innerhalb von " die vorhandenen Sonderzeichen
gequotet werden, aber das ist weit aufwendiger.


Thomas

Stefan Kanthak

unread,
Apr 11, 2012, 9:14:38 AM4/11/12
to
"Uwe Premer" <m...@uwe-premer.de> schrieb:


> ~> echo "X-Face:
> Ai+CK3C=Y%,3@@qT0GY9cJq2t}d5f.@C=*Ra%\\Hz4HCQR(FthsbbQ0JdfNd\|
> b4msVp`!)PT$#>mN[Dh2=IEJ>NEUB"(^N=iq~H+3)zeVhZG.xJ6*gHvHpUg,h:@nUo'l-(Eq5f}zGXy%Cs(8hXB8=;~n2wWqqOor-
> Mony`'q+d3:K@O3e-n~,x3"
> bash: !: event not found
>
> Wie kann ich exakt diesen X-Face-Text per echo in der bash anzeigen
> lassen?

Vergleiche

echo \\
echo "\\"
echo '\\'

oder

echo $#
echo "$#"
echo '$#'

Stefan
[
--
Die unaufgeforderte Zusendung werbender E-Mails verstoesst gegen §823
Abs. 1 sowie §1004 Abs. 1 BGB und begruendet Anspruch auf Unterlassung.
Beschluss des OLG Bamberg vom 12.05.2005 (AZ: 1 U 143/04)


Juergen Ilse

unread,
Apr 11, 2012, 3:41:58 PM4/11/12
to
Hallo,

Tim Landscheidt <t...@tim-landscheidt.de> wrote:
> Uwe Premer <m...@uwe-premer.de> wrote:
>> Für ein Script benötige ich folgende Ausgabe:

>> echo "X-Face:
>> Ai+CK3C=Y%,3@@qT0GY9cJq2t}d5f.@C=*Ra%\\Hz4HCQR(FthsbbQ0JdfNd\|
>> b4msVp`!)PT$#>mN[Dh2=IEJ>NEUB"(^N=iq~H+3)zeVhZG.xJ6*gHvHpUg,h:@nUo'l-(Eq5f}zGXy%Cs(8hXB8=;~n2wWqqOor-
>> Mony`'q+d3:K@O3e-n~,x3"

>> (alles in einer Zeile!)

Die bash macht die von der csg her stammende (und von fast niemand bei
der bash verwendete) "History-Expansion" (und dann teilweise Fehler
beim quoting des "!"). An der Stelle ist die bash eine eher unglueckliche
Wahl ...

>> Eigentlich ganz easy: der in " eingeschlossene Text soll angezeigt
>> werden.

Wenn der anzuzeigende Text selbst ein '"' enthaelt, geht das in die Hose ...

>> Allerdings ergibt sich dieser Fehler in der bash:

>> ~> echo "X-Face:
>> Ai+CK3C=Y%,3@@qT0GY9cJq2t}d5f.@C=*Ra%\\Hz4HCQR(FthsbbQ0JdfNd\|
>> b4msVp`!)PT$#>mN[Dh2=IEJ>NEUB"(^N=iq~H+3)zeVhZG.xJ6*gHvHpUg,h:@nUo'l-(Eq5f}zGXy%Cs(8hXB8=;~n2wWqqOor-
>> Mony`'q+d3:K@O3e-n~,x3"
>> bash: !: event not found

Die shell stolpert ueber ihre eigene (eigentlich voellig ueberfluessige)
Faehigkeit zur "History-Expansion" ...

>> Wie kann ich exakt diesen X-Face-Text per echo in der bash anzeigen
>> lassen?

> Beispielsweise mit einfachen Anführungszeichen:

Was schief geht, wenn der auszugebende Text selbst wieder ein "single Quote"
enthaelt (was hier der Fall ist): Der auszugebende String wird dann ver-
faelscht oder bei ungerader Anzahl bpn Single-Quotes in der Zeichenkette
kann es ggfs. sogar zu Syntax-Fehlern kommen, die die shell meldet ...
Wenn es in einem script verwendet werden soll, kann man ggfs. mit der
"here document" Methode arbeiten:

cat <<EOF
X-Face: Ai+CK3C=Y%,3@@qT0GY9cJq2t}d5f.@C=*Ra%\\Hz4HCQR(FthsbbQ0JdfNd\|b4msVp`!)PT$#>mN[Dh2=IEJ>NEUB"(^N=iq~H+3)zeVhZG.xJ6*gHvHpUg,h:@nUo'\''l-(Eq5f}zGXy%Cs(8hXB8=;~n2wWqqOor-Mony`'\''q+d3:K@O3e-n~,x3
EOF

Wobei allerdings (obwohl das IMHO nicht passieren sollte) nicht nur die
bash sondern z.B. auch die dash den Text im "here document" noch einmal
parsed, was dann wieder zu einem Fehler fuehrt ... :-(

Eine funktionierende Methode (fuer bash, ksh und alle Posix-shells)
waere es wohl, die auszugebende Zeichenkette in eine separate Datei
zu schreiben, die man dann z.B. mit cat ausgibt (aber auch etwas wie
echo "$(<face.txt)"
wuerde funktionieren, wenn face.txt den auszugebenden String enthaelt).

> Quoting in Shell-Scripts ist normalerweise die letzte Motivation,
> Perl zu lernen :-).

Man muss bei der shell nur wissen, was und vor allem *wie* man etwas
tut. Und am besten macht man des oefteren (gerade was scripts angeht)
im die bash einen Bogen (deren Besonderheiten fuehren nur allzu oft
zu unportablen, in Faellen wie diesem schlimmstenfalls zu disfunk-
tionalen scripts). Und perl ist auch nicht so sehr der Weisheit letzter
Schluss, wie es die Fans dieser Sprache gern haetten ...).

Tschuess,
Juergen Ilse (jue...@usenet-verwaltung.de)
--
Ein Domainname ist nur ein Name, nicht mehr und nicht weniger.
Wer mehr hineininterpretiert, hat das Domain-Name-System nicht
verstanden.

Stefan Kanthak

unread,
Apr 11, 2012, 4:09:18 PM4/11/12
to
"Juergen Ilse" <jue...@usenet-verwaltung.de> schrieb:

[...]

> Wenn es in einem script verwendet werden soll, kann man ggfs. mit der
> "here document" Methode arbeiten:
>
> cat <<EOF
> X-Face:
Ai+CK3C=Y%,3@@qT0GY9cJq2t}d5f.@C=*Ra%\\Hz4HCQR(FthsbbQ0JdfNd\|b4msVp`!)PT$#>mN[Dh2=IEJ>NEUB"(^N=iq~H+3)zeVhZG.xJ6*gHvHpUg,h:@nUo'\''
l-(Eq5f}zGXy%Cs(8hXB8=;~n2wWqqOor-Mony`'\''q+d3:K@O3e-n~,x3
> EOF
>
> Wobei allerdings (obwohl das IMHO nicht passieren sollte) nicht nur die
> bash sondern z.B. auch die dash den Text im "here document" noch einmal
> parsed, was dann wieder zu einem Fehler fuehrt ... :-(

Dagegen hilft
cat <<\E\O\F
...
EOF

Uwe Premer

unread,
Apr 11, 2012, 4:13:58 PM4/11/12
to
An alle Poster im Thread:
danke für die zahlreichen Antworten.

Was jedoch das eigentliche Problem angeht, so konnte ich dieses dank
Hilfe an andere Stelle anders lösen.

Insofern hat sich meine Frage hier erledigt, aber ich hab mir alles
aufmerksam durchgelesen für anderweitige Probleme dieser Art.

Uwe

Paul Hink

unread,
Apr 11, 2012, 4:14:41 PM4/11/12
to
Juergen Ilse <jue...@usenet-verwaltung.de> wrote:

> Wenn es in einem script verwendet werden soll, kann man ggfs. mit der
> "here document" Methode arbeiten:
>
> cat <<EOF
> X-Face: Ai+CK3C=Y%,3@@qT0GY9cJq2t}d5f.@C=*Ra%\\Hz4HCQR(FthsbbQ0JdfNd\|b4msVp`!)PT$#>mN[Dh2=IEJ>NEUB"(^N=iq~H+3)zeVhZG.xJ6*gHvHpUg,h:@nUo'\''l-(Eq5f}zGXy%Cs(8hXB8=;~n2wWqqOor-Mony`'\''q+d3:K@O3e-n~,x3
> EOF
>
> Wobei allerdings (obwohl das IMHO nicht passieren sollte) nicht nur die
> bash sondern z.B. auch die dash den Text im "here document" noch einmal
> parsed, was dann wieder zu einem Fehler fuehrt ... :-(

Das lässt sich wenigstens bei der bash verhindern, indem man das "EOF"
in Anführungszeichen setzt:

| The format of here-documents is:
|
| <<[-]word
| here-document
| delimiter
|
| [...] If any characters in word are quoted [...] the lines in the
| here-document are not expanded.

(aus der bash-4.1.5(1)-Manpage)

Achim Peters

unread,
Apr 11, 2012, 5:53:28 PM4/11/12
to
Am 11.04.2012 21:41, schrieb Juergen Ilse:
> am besten macht man des oefteren (gerade was scripts angeht)
> im die bash einen Bogen (deren Besonderheiten fuehren nur allzu oft
> zu unportablen, in Faellen wie diesem schlimmstenfalls zu disfunk-
> tionalen scripts).

Sondern nehme? AKA: Was nimmst Du dafür?

Bye
Achim (ksh-Fan)

Juergen Ilse

unread,
Apr 11, 2012, 7:14:21 PM4/11/12
to
Hallo,
Wenn es nicht allzuviel Mehraufwand bedeutezm beschraenke ich mich
auf die Eigenschaften der Bournesgell und verwende /bin/sh (selbst
wenn das ein Link auf die bash sein sollte, werden durch den anderen
Aufrufnamen einige zur Posix-sgell inkompatible Eigenschaften totgelegt),
bei Ubuntu ist /bin/sh per Default eine "dash" und keine bash (und
damit deutlich naeher an einer "Posix-shell" als es dir bash wohl
je sein wird). Wenn die Bournesgell zu alt ist, ist die ksh keine
schlechte wahl (solange keine ash oder dash zur Verfuegung steht).
Selbst wenn ich die bash verwende, versuche ich moeglichst auf
"bashismen" zu verzichten ...

Da ich "<<" ao selten verwende, war mir die (dokumentierte) Sache
mit dem gequoteten "Marker" auch nicht gelaeufig (ich habe es aber
nach den Hinweis extra noch einmal nachgelesen), so habe ich denn
in diesem Thread auch noch etwas gelernt ...

Ulli Horlacher

unread,
Apr 12, 2012, 3:31:22 AM4/12/12
to
Juergen Ilse <jue...@usenet-verwaltung.de> wrote:

> Die bash macht die von der csg her stammende (und von fast niemand bei
> der bash verwendete) "History-Expansion" (und dann teilweise Fehler
> beim quoting des "!"). An der Stelle ist die bash eine eher unglueckliche
> Wahl ...

Man kann das der bash auch einfach abgewoehnen mit:
histchars=


> > Beispielsweise mit einfachen Anführungszeichen:
>
> Was schief geht, wenn der auszugebende Text selbst wieder ein "single Quote"
> enthaelt (was hier der Fall ist): Der auszugebende String wird dann ver-
> faelscht oder bei ungerader Anzahl bpn Single-Quotes in der Zeichenkette
> kann es ggfs. sogar zu Syntax-Fehlern kommen, die die shell meldet ...
> Wenn es in einem script verwendet werden soll, kann man ggfs. mit der
> "here document" Methode arbeiten:
>
> cat <<EOF
> X-Face: Ai+CK3C=Y%,3@@qT0GY9cJq2t}d5f.@C=*Ra%\\Hz4HCQR(FthsbbQ0JdfNd\|b4msVp`!)PT$#>mN[Dh2=IEJ>NEUB"(^N=iq~H+3)zeVhZG.xJ6*gHvHpUg,h:@nUo'\''l-(Eq5f}zGXy%Cs(8hXB8=;~n2wWqqOor-Mony`'\''q+d3:K@O3e-n~,x3
> EOF


framstag@fex:~: cat <<EOD
: und so $gehts auch schief
: EOD
und so auch schief

framstag@fex:~: cat <<'EOD'
: und so $gehts besser: '"`
: EOD
und so $gehts besser: '"`



--
Ullrich Horlacher Informationssysteme und Serverbetrieb
Rechenzentrum E-Mail: horl...@rus.uni-stuttgart.de
Universitaet Stuttgart Tel: ++49-711-685-65868
Allmandring 30 Fax: ++49-711-682357
70550 Stuttgart (Germany) WWW: http://www.rus.uni-stuttgart.de/

Christian Weisgerber

unread,
Apr 14, 2012, 8:42:27 AM4/14/12
to
Ulli Horlacher <fram...@rus.uni-stuttgart.de> wrote:

> > Die bash macht die von der csg her stammende (und von fast niemand bei
> > der bash verwendete) "History-Expansion" (und dann teilweise Fehler
> > beim quoting des "!"). An der Stelle ist die bash eine eher unglueckliche
> > Wahl ...
>
> Man kann das der bash auch einfach abgewoehnen mit:
> histchars=

set +H

--
Christian "naddy" Weisgerber na...@mips.inka.de
0 new messages