Archiv verlassen und diese Seite im Standarddesign anzeigen : Bash: FRage?
Ein Metazeichen wird niemals vom jeweiligen Kommando interpretiert, sondern immer von der Shell. Aus diesem Grund funktioniert ein Kommando wie
user@sonne> cp *.x *.y
unter einer Unix -Shell nicht.
Diesen Satz habe ich unter http://www.linuxfibel.de/command.htm gefunden und ich verstehe den Sinn nicht ganz.
Warum funktioniert
ls *.map aber der obige befehl nicht? Wo genau liegt der Unterschied? Was bedeutet, dass ein Metazeichen nicht von einem KOmmando, sondern von der Shell interpretiert wird?
Sorry wegen der bloeben Ueberschrift.
Der Unterschied dürfte sein, das nicht alle *.x nach *.y umbenannt werden.
Dafür gäbe es dann Schleifen.(1)
Ein Metazeichen wäre etwa: *
Die Shell ersetzt in *.x dann * durch alle Vorkommen von [0-9a-zA-Z] und kombiniert das mit der Endung .x und gibt das an ls durch. Soweit erstmal.
1)
for t in *.x; do echo mv "$t" "$t"|sed -s 's/\.x/\.y/g' ; done
mv a.x a.y
mv b.x b.y
Damit die Sache wirksam wird muss dann das echo noch raus.
Ich glaube, dass das was dieser Satz aussagen soll folgendes ist:
Wenn du 'cp *.x *.y' eingibst, bekommt cp eben nicht '*.x' u. '*.y' als Optionen sondern alle Dateien auf die '*.x' u. '*.y' passen. Das 'Problem' dabei ist, dass man das Kommando (falls man cp nicht kennt) aber auch anders interpretieren könnte, nämlich als 'kopiere alle Dateien mit der Endung .x in Dateien mit der Endung .y - ich glaube darauf wollte derjenige hinaus. (Für solche Kopieraktionen gibt es übrignes mcp -> sehr praktisches kleines Progrämmchen).
Zum Vergleich, wenn du unter Windows z.B. xcopy *.* d: eingibst, bekommt xcopy als Optionen '*.*' und 'd:' übergeben - die Shell (command.com bzw. cmd.exe) interpretiert hier nichts. Wenn du 'ls *.map' unter eine Unix Shell eingibst, bekommt ls alle Dateien auf die *.map passt übergeben - ls wird dann z.B. so aufgerufen 'ls a.map b.map z.map'.
Ich hoffe das war einigermaßen verständlich 8)
Powered by vBulletin® Version 4.2.5 Copyright ©2024 Adduco Digital e.K. und vBulletin Solutions, Inc. Alle Rechte vorbehalten.