• Willkommen im Linux Club - dem deutschsprachigen Supportforum für GNU/Linux. Registriere dich kostenlos, um alle Inhalte zu sehen und Fragen zu stellen.

/usr/bin/timeout unter Suse 7

regexer

Advanced Hacker
Hallo zusammen,

ich bin neu hier und deswegen nicht sicher, ob ich meinen Beitrag ins richtige Board schreibe...

Problem:
/usr/bin/timeout mag keine minus-Zeichen in den Programm-Argumenten. Vielleicht wird an folgendem Beispiel deutlich, was ich meine:

timeout 15 echo -n test
timeout: invalid option -- n

Ich habe schon versucht, durch Backslash oder einfache Hochkommas timeout irgendwie dazu zu bringen -n als Argument von echo zu erkennen. Aber es tut nicht.

Weiß irgendjemand eine Lösung?

Danke und Gruß,

notoxp
 

TranceTip

Newbie
Probier's mal mit mit

timeout 15 -- echo -n test

Das "--" stoppt normalerweise das Auswerten von Optionen bei einem Kommando. Das "-n" wird dann zu "echo" dazugenommen, anstatt es als Option für "timeout" zu anzusehen
 
OP
regexer

regexer

Advanced Hacker
TranceTip schrieb:
Das "-n" wird dann zu "echo" dazugenommen, anstatt es als Option für "timeout" zu anzusehen
Genial! Funktioniert! Danke! Komisch ist nur, dass z.B. der Befehl "time" an dieser stelle schlauer ist...

Ist das "--" eigentlich eine Feature der Shell? Ich denke nicht. Das wird noch vom binary timeout als "Parameter" ausgewertet. Warum steht das dann nicht in der manpage?

Naja, man lernt nie aus ...
 

TranceTip

Newbie
Das "--" hat mit der Shell nichts zu tun, sondern wird vom jeweiligen Kommando interpretiert. Die Kommandos benutzen meist die C-Funktion getopt(), um die Parameter zu parsen. getopt() sieht jeden Parameter, der mit "-" beginnt als Option zum Kommando an (egal wo das steht), alles ohne "-" wird als nicht-Option angesehen, wobei zu Optionen natürlich auch Argumente gehören können (wie bei "-f dateiname" o.ä.). getopt() sieht als Ausnahmeregelung alles nach dem ersten "--" als Nicht-Option an, auch wenn die Sachen mit "-" beginnen.

Das ist auch z.B. die einzige Möglichkeit, wie man Dateien löschen kann, die mit einem Minuszeichen beginnen:

Code:
rm -- -bla.txt

"time" wertet die Parameter anscheinend anders aus: es will zuerst die Optionen für "time", dann einen Kommandonamen und dann beliebige weitere Argumente (auch Optionen), die dann zum Kommando gehören.
 
OP
regexer

regexer

Advanced Hacker
Danke für die Hintergrundinfos.

Kann man bei rm auch nicht mit Backslash oder Hochkomma arbeiten? Habe ich noch nie ausprobiert ...
 

TranceTip

Newbie
Nein, Anführungszeichen bzw. Hochkomma ändern nichts an der Auswertung der Parameter durch das Kommando. Sie erlauben lediglich, dass z.B. Leerzeichen in den Parametern übergeben werden dürfen.

Ein


geht also ebenfalls nicht.
 
Oben