it-swarm.com.de

Eine Zahl wiederholen?

Für eine Datei in sysfs habe ich versucht mit

echo 45>target_size

dies schlug mit einem ungültigen Eintrag fehl. Wenn ich jedoch tue:

x=45;echo $x>target_size

es funktioniert gut. Wenn ich eine sehr große Zahl verwende, erhalte ich außerdem eine Fehlermeldung bezüglich einer ungültigen Dateinummer. Wenn Sie also eine gerade Zahl wiedergeben, interpretiert das Terminal diese offenbar als Dateideskriptor und nicht als wörtliche Zahl. Wie kann man eine Zahl richtig wiedergeben?

6
Zephyr

Ich denke, es geht darum, wie die Shell Ihren Befehl analysiert. Wenn Sie das tun

echo 45>target_size

die Shell leitet den Dateideskriptor 45 an filetarget_size weiter und führt dann echo ohne Argumente aus.

Wenn du es stattdessen tust

echo 45 >target_size

der Standard-Ausgabedeskriptor wird in die Datei target_size umgeleitet und anschließend echo 45 ausgeführt.

TL; DR Leerzeichen vor dem Umleitungsoperator einfügen.

20
steeldriver

Die Antwort von @steeldriver ist richtig - der Abstand zwischen Nummer und Umleitungsoperator ist wichtig. Es scheint ein inkonsistentes Verhalten zu sein, da in meinen Tests _echo 45>output.txt_ 45 in ksh93- und dash-Shells-Dateien geschrieben werden.

Alternativ können Sie auch den Befehl tee mit dem Operator _here-string<<<_ verwenden.

_tee  output_file.txt <<< "45"
_

Oder mit jenen Shells, die keinen Operator _<<<_ haben, _echo 45 | tee output_file.txt_

3