Diese Website existiert nur weil wir Werbung mit AdSense ausliefern.
Bitte den AdBlocker daher auf dieser Website ausschalten! Danke.

/usr/bin/timeout unter Suse 7

Alles rund um die verschiedenen Konsolen und shells sowie die Programmierung unter Linux

Moderator: Moderatoren

Antworten
Benutzeravatar
regexer
Advanced Hacker
Advanced Hacker
Beiträge: 1005
Registriert: 3. Dez 2004, 09:29
Wohnort: $_

/usr/bin/timeout unter Suse 7

Beitrag von regexer »

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
Newbie
Beiträge: 13
Registriert: 13. Mai 2004, 14:18

Beitrag von TranceTip »

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
Benutzeravatar
regexer
Advanced Hacker
Advanced Hacker
Beiträge: 1005
Registriert: 3. Dez 2004, 09:29
Wohnort: $_

Beitrag von regexer »

TranceTip hat geschrieben: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
Newbie
Beiträge: 13
Registriert: 13. Mai 2004, 14:18

Beitrag von TranceTip »

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: Alles auswählen

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.
Benutzeravatar
regexer
Advanced Hacker
Advanced Hacker
Beiträge: 1005
Registriert: 3. Dez 2004, 09:29
Wohnort: $_

Beitrag von regexer »

Danke für die Hintergrundinfos.

Kann man bei rm auch nicht mit Backslash oder Hochkomma arbeiten? Habe ich noch nie ausprobiert ...
TranceTip
Newbie
Newbie
Beiträge: 13
Registriert: 13. Mai 2004, 14:18

Beitrag von TranceTip »

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
rm "-bla.txt"
geht also ebenfalls nicht.
Benutzeravatar
regexer
Advanced Hacker
Advanced Hacker
Beiträge: 1005
Registriert: 3. Dez 2004, 09:29
Wohnort: $_

Beitrag von regexer »

TranceTip hat geschrieben:Nein, Anführungszeichen bzw. Hochkomma ändern nichts an der Auswertung der Parameter durch das Kommando.
Stimmt! Das Minus ist ja kein Meta-Zeichen der Shell...
Antworten