BASH-FAQ-Eintrag Nr. 50: "Ich versuche, einen Befehl in eine Variable zu setzen, aber die komplexen Fälle scheitern immer!"
Kann nicht über einen Dateinamen mit Leerzeichen stat
Ich bin sehr neu in Shell-Skripten und schreibe ein Skript für ein Projekt. Ich habe ein Problem, während Sie "stat" für einen Dateinamen verwenden, um die Größe zu überprüfen, die Leerzeichen enthält. Das Problem ist, dass ich den Befehl nicht direkt schreiben kann. Zuerst muss ich ihn in einer Variablen speichern und dann über diese Variable ausführen. Zum Beispiel lautet mein Skript:
##test.sh ###Start OIFS=$IFS IFS=$'\n' filename=$1 a=stat b=-c c=%s d=$ CMD="$a $b $c $d" result=`$CMD` echo "Size is:"$result IFS=$OIFS ###END
Ich habe IFS = $ '\ n' gesetzt, um den Dateinamen mit Platz als Parameter zu übergeben. wenn ich es ausführen, bekomme ich:
[root@abhargava ~]# ./test.sh dirLevel1/file\ Level1.txt ./test.sh: line 9: stat -c %s dirLevel1/file Level1.txt: No such file or directory Size is:
Aufgrund von IFS denke ich, dass Shell den Befehl als eine Einheit behandelt, ohne ihn in Teile zu teilen. Wenn ich die Einstellung von IFS entferne, heißt es:
[root@abhargava ~]# ./test.sh dirLevel1/file\ Level1.txt stat: cannot stat `dirLevel1/file': No such file or directory stat: cannot stat `Level1.txt': No such file or directory Size is:
Der Parameter wird also als zwei verschiedene Dateien behandelt. Ich kann "$ @" auch nicht verwenden, weil ich den Dateinamen von einer anderen Logik bekomme, in der Dateien in einem Verzeichnis aufgeführt werden
for i in 'find $ -type f' do calling the test.sh done
Bitte hilf mir so schnell wie möglich .. !! Danke im Voraus....!!
2 Antworten auf die Frage
Ich stimme mit Ignacio überein, dass es am besten ist, Bash-Skripts einfach zu halten. Daher habe ich das Skript vereinfacht, damit es mit Leerzeichen arbeiten kann. Damit es Leerzeichen behandeln kann, hat das Skript das Einschließen des Dateinamens in Anführungszeichen ermöglicht, Leerzeichen im Dateinamen zu behandeln.
##test.sh ###Start result=`stat -c %s "$1"` echo "Size is:"$result ###END
Verwandte Probleme
-
6
Welche zsh-Funktionen verwenden Sie?
-
8
Die Windows-Shell töten
-
3
Mac OS X: herkömmliche Orte, an denen Binärdateien gespeichert werden sollen
-
2
Mac OS X: einfaches Skript gesucht
-
2
Wie finde und vergleiche ich ähnliche Dateien im Dropbox-Ordner?
-
1
ksh entspricht perl $! Fehlerursache
-
3
Herausfinden, welcher Nicht-Symlink-Pfad wäre?
-
4
Wie kann ich ein Dateieigenschaftsdialogfeld von der Befehlszeile aus starten?
-
2
Kann ich beim Start von Terminal eine Reihe von Registerkarten einrichten?
-
2
Unterschied zwischen Lam und Paste