PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Bash: FRage?



davidh38
13.03.07, 11:06
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.

403
13.03.07, 11:14
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.

Henni
13.03.07, 11:20
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)