GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Behoben:Bash-Skript, das eine Pfadeingabe mit / am Ende erwartet, bricht ab, wenn der Pfad nicht mit /? endet

Ich habe diesen Code:

for file in "[email protected]"*png; do
  echo "$file"
done

Es funktioniert nur, wenn Sie einen Pfad angeben, der mit / endet, wie /root/ .

Was wäre der richtige Weg, um in solchen Situationen / zur Pfadeingabe hinzuzufügen, ohne mein Skript zu beschädigen?

Wenn Sie einen Pfad ohne / am Ende eingeben, geschieht dies einfach:

File: /root*png

Wenn ich es so ändere, dass es for file in "[email protected]"/*png; do und geben Sie /root/test/ ein es funktioniert, aber das Ergebnis sieht hässlich aus :

File: //eadn-wc01-5196795.nxedge.io/root/test//sample2.png

Akzeptierte Antwort:

ilkkachu wies auf einen großen Fehler in meiner Antwort hin und korrigierte ihn in seiner, also geben Sie ihm bitte die Anerkennung, die er verdient. Ich habe mir aber eine andere Lösung ausgedacht:

#!/bin/bash

for dir in "[email protected]"; do
        find "$dir" -type f -name '*png' -exec readlink -f {}  \;
done

Beispiel :

$ ll
total 6
-rwxr-xr-x 1 root root 104 Jan  7 14:03 script.sh*
drwxr-xr-x 2 root root   3 Jan  7 04:21 test1/
drwxr-xr-x 2 root root   3 Jan  7 04:21 test2/
drwxr-xr-x 2 root root   3 Jan  7 04:21 test3/

$ for n in {1..3}; do ll "test$n"; done
total 1
-rw-r--r-- 1 root root 0 Jan  7 04:21 testfile.png
total 1
-rw-r--r-- 1 root root 0 Jan  7 04:21 testfile.png
total 1
-rw-r--r-- 1 root root 0 Jan  7 04:21 testfile.png

$ ./script.sh test1 test2/ test3
//eadn-wc01-5196795.nxedge.io/root/temp/test1/testfile.png
//eadn-wc01-5196795.nxedge.io/root/temp/test2/testfile.png
//eadn-wc01-5196795.nxedge.io/root/temp/test3/testfile.png

Originallösung :

for file in "${@%/}/"*png; do
  echo "$file"
done

Das ${@%/} schneidet alle / am Ende Ihres Parameters ab und dann fügt das / außen es wieder hinzu – oder fügt es jedem Parameter hinzu, der keins hatte.


Linux
  1. Deaktivieren Sie die Anmeldung mit dem Root-Konto

  2. Wann soll in Bash ein Alias, wann ein Skript und wann eine Funktion geschrieben werden?

  3. Warum erkennt das Bash-Skript keine Aliase?

  4. Warum funktioniert das ~/.bash_profile nicht?

  5. Warum führt „sudo Su“ in einem Shell-Skript den Rest des Skripts nicht als Root aus?

Automatisieren Sie die Bildverarbeitung mit diesem Bash-Skript

Verwenden Sie dieses hilfreiche Bash-Skript, wenn Sie Sterne beobachten

So schreiben Sie ein Bash-Skript mit Beispielen

'&&' vs. '&' mit dem 'test'-Befehl in Bash

Nohup für Python-Skript funktioniert nicht, wenn es im Hintergrund mit &ausgeführt wird

Was ist falsch an meinem Bash-Skript, um die letzten x Dateien zu behalten und den Rest zu löschen?