Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
-
comes
- Beiträge: 2702
- Registriert: 11.03.2005 07:33:30
- Wohnort: /dev/null
-
Kontaktdaten:
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
-
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:
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?
-
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).