WICHTIG: Schwerwiegendes Scripting problem bash -> gpg

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
comes
Beiträge: 2702
Registriert: 11.03.2005 07:33:30
Wohnort: /dev/null
Kontaktdaten:

WICHTIG: Schwerwiegendes Scripting problem bash -> gpg

Beitrag von comes » 10.08.2007 14:33:20

Hallo Zusammen,

Ich hab hier eine ziemlich harte nuss:

Code: Alles auswählen

[ich@recher dev]$ ./fakegpg.sh --batch --armor --output - -r \"Mein Key\" -e /home/jeremias/file.txt
--batch --armor --output - -r "Mein Key" -e /home/jeremias/file.txt
8
usage: gpg [options] [filename]
[ich@recher dev]$ cat fakegpg.sh
#!/bin/sh
echo $*
echo $#
gpg $*
exit 0
geht NICHT!

jedoch:

Code: Alles auswählen

[ich@recher dev]$ gpg --batch --armor --output - -r "Mein Key" -e /home/jeremias/file.txt
[<-- BLOCK ENTFERNT -->]
[ich@recher dev]$
geht! warum? wie bringe ich gpg dazu, mit den parametern einer anderen anwendung zu arbeiten?

Bitte Probiert eure vorschläge VORHER auf euren rechner aus.

Code: Alles auswählen

$ uname -a
Linux rechner 2.6.9-42.ELsmp #1 SMP Wed Jul 12 23:32:02 EDT 2006 x86_64 x86_64 x86_64 GNU/Linux

$ bash --version
GNU bash, version 3.00.15(1)-release (x86_64-redhat-linux-gnu)
Copyright (C) 2004 Free Software Foundation, Inc.
Bitte nur ernste vorschläge!


danke
grüße, comes

Faschismus ist keine Meinung, sondern ein Verbrechen!
http://sourcewars.de

Benutzeravatar
markus_b
Beiträge: 355
Registriert: 26.01.2006 04:57:18
Lizenz eigener Beiträge: MIT Lizenz

Beitrag von markus_b » 10.08.2007 15:07:33

Es gibt ja mehrere Möglichkeiten, die Parameter in der Bash zu benutzen:

Code: Alles auswählen

$*
"$*"
$@
"$@"
Wobei jede Möglichkeit etwas andere bewirkt.
Die Parameter mit dem * hängen dabei noch von der IFS Variable ab.

In deinem Fall dürfte wahrscheinlich die letzte Methode funktionieren ("$@"):

Code: Alles auswählen

$ cat test.sh
#!/bin/bash
ls "$@"
$ bash test.sh -l "datei mit space"
-rw-r--r-- 1 markus markus 0 2007-08-10 15:05 datei mit space

comes
Beiträge: 2702
Registriert: 11.03.2005 07:33:30
Wohnort: /dev/null
Kontaktdaten:

Beitrag von comes » 10.08.2007 16:50:46

danke, das geht! das problem ist damit zwar noch nicht gelöst, weil es eine vorstufe dessen ist, aber es geht. danke!

wärst du so freundlich mit den unterschied zwischen $* $@ "$*" und "$@" zu erklären?
grüße, comes

Faschismus ist keine Meinung, sondern ein Verbrechen!
http://sourcewars.de

Benutzeravatar
markus_b
Beiträge: 355
Registriert: 26.01.2006 04:57:18
Lizenz eigener Beiträge: MIT Lizenz

Beitrag von markus_b » 10.08.2007 18:32:30

comes hat geschrieben: wärst du so freundlich mit den unterschied zwischen $* $@ "$*" und "$@" zu erklären?
man bash:

Code: Alles auswählen

   Special Parameters
       The shell treats several parameters specially.  These  parameters  may  only  be
       referenced; assignment to them is not allowed.
       *      Expands to the positional parameters, starting from one.  When the expan‐
              sion occurs within double quotes, it expands to a single  word  with  the
              value  of each parameter separated by the first character of the IFS spe‐
              cial variable.  That is, "$*" is equivalent to "$1c$2c...",  where  c  is
              the  first  character of the value of the IFS variable.  If IFS is unset,
              the parameters are separated by spaces.  If IFS is null,  the  parameters
              are joined without intervening separators.
       @      Expands to the positional parameters, starting from one.  When the expan‐
              sion occurs within double quotes, each parameter expands  to  a  separate
              word.  That is, "$@" is equivalent to "$1" "$2" ...  If the double-quoted
              expansion occurs within a word, the expansion of the first  parameter  is
              joined with the beginning part of the original word, and the expansion of
              the last parameter is joined with the last part  of  the  original  word.
              When  there  are  no positional parameters, "$@" and $@ expand to nothing
              (i.e., they are removed).


Antworten