staging.inyokaproject.org

Fehler bei Übergabe von Parametern an Shell-Funktion

Status: Ungelöst | Ubuntu-Version: Ubuntu
Antworten |

shokifrend77

Avatar von shokifrend77

Anmeldungsdatum:
1. Dezember 2017

Beiträge: 14

ich habe es jetzt so gemacht:

function timer() { echo $1 ; sleep $1 ; if [ $2 = 0 ] ; then  set $2=timer abgelaufen ; fi ; zenity --info --text="$2" };

aber was dabei rauskommt:

pi@Raspi-3:~ $ timer 2s timer_abgelaufen
sleep: fehlender Operand
„sleep --help“ liefert weitere Informationen.

kann bitte irgendeiner mir helfen?(danke schonmal im foraus)

gruß schokoladenfreund

Moderiert von rklm:

Abgetrennt von diesem Thema. Bitte keine Themen entführen!

rklm Team-Icon

Projektleitung

Anmeldungsdatum:
16. Oktober 2011

Beiträge: 13242

shokifrend77 schrieb:

ich habe es jetzt so gemacht:

function timer() { echo $1 ; sleep $1 ; if [ $2 = 0 ] ; then  set $2=timer abgelaufen ; fi ; zenity --info --text="$2" };

Das ist bestimmt nicht der Code, den Du ausgeführt hast.

aber was dabei rauskommt:

pi@Raspi-3:~ $ timer 2s timer_abgelaufen
sleep: fehlender Operand
„sleep --help“ liefert weitere Informationen.

Bei mir passiert:

1
2
3
4
5
6
$ function timer() { echo $1 ; sleep $1 ; if [ $2 = 0 ] ; then  set $2=timer abgelaufen ; fi ; zenity --info --text="$2" };
> ^C
$ bash -n <<'CODE'
function timer() { echo $1 ; sleep $1 ; if [ $2 = 0 ] ; then  set $2=timer abgelaufen ; fi ; zenity --info --text="$2" };
CODE
bash: line 2: syntax error: unexpected end of file

Das liegt daran, dass das Semikolon am Ende vor der schließenden geschweiften Klammer stehen muss.

Darüber hinaus verwendest Du set falsch. Zumindest hat es den Anschein. Auch die Logik mit dem Vergleich mit 0 passt nicht, denn dann führst Du ja immer set 0=timer abgelaufen aus, was vermutlich nicht das tut, was Du möchtest:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
$ echo "$#: $*"
0: 
$ echo "$#: <$*>"
0: <>
$ set 0=timer abgelaufen
$ echo "$#: <$*>"
2: <0=timer abgelaufen>
$ echo "$1"
0=timer
$ echo "$2"
abgelaufen

Mit anderen Worten: es setzt die Argumente der aktuellen Shell.

Sag mal lieber, was Du vorhast.

shokifrend77

(Themenstarter)
Avatar von shokifrend77

Anmeldungsdatum:
1. Dezember 2017

Beiträge: 14

ich habe es jetzt so gemacht:

function timer() { sleep $1 ; if [ $2 = 0 ] ; then  set $2=timer abgelaufen ; fi ; zenity --info --text="$2" };

aber was rauskommt:

pi@Raspi-3:~ $ timer 2s timer_abgelaufen
sleep: fehlender Operand
„sleep --help“ liefert weitere Informationen.

kann mir irgendeiner helfen 😕 💡.

Moderiert von rklm:

Von diesem an das richtige Thema angehängt. Hast Du die Benachrichtigung über die Aufteilung des Themas nicht bekommen? Bitte führe die Diskussion hier weiter!

rklm Team-Icon

Projektleitung

Anmeldungsdatum:
16. Oktober 2011

Beiträge: 13242

shokifrend77 schrieb:

kann mir irgendeiner helfen 😕 💡.

Siehe meine Erläuterungen oben.

PS: Statt "Mit anderen Worten: es setzt die Argumente der aktuellen Shell." muss es heißen "Mit anderen Worten: es setzt die Argumente der aktuellen Shellfunktion."

Antworten |