GNU/Linux >> Znalost Linux >  >> Linux

Opravit skript Bash Očekávání vstupu cesty s / Na konci se přeruší, když cesta nekončí na /?

Mám tento kód:

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

Funguje to pouze v případě, že zadáte cestu, která končí na / jako /root/ .

Jaký by byl správný způsob přidání / do vstupu cesty v situacích, jako je tato, aniž by došlo k porušení mého skriptu?

Pokud zadáte cestu bez / na konci, udělá to pouze toto:

File: /root*png

Pokud jej upravím tak, aby byl for file in "[email protected]"/*png; do a zadejte /root/test/ funguje to, ale výsledek vypadá ošklivě :

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

Přijatá odpověď:

Ilkkachu poukázal na hlavní chybu v mé odpovědi a opravil ji ve své, takže mu prosím dejte uznání, které si zaslouží. Přišel jsem však s jiným řešením:

#!/bin/bash

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

Příklad :

$ 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

Původní řešení :

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

${@%/} ořízne jakýkoli / z konce vašeho parametru a poté jej / mimo přidá zpět – nebo jej přidá k jakémukoli parametru, který žádný nemá.


Linux
  1. V Bash, kdy alias, kdy skript a kdy napsat funkci?

  2. Proč skript Bash nerozpozná aliasy?

  3. Proč nefunguje ~/.bash_profile?

  1. Proč „sudo Su“ ve skriptu Shell nespustí zbytek skriptu jako kořen?

  2. Jak signalizovat konec vstupu Stdin?

  3. Jak nastavit parametry, když Pipe Bash Script to Bash?

  1. Zakažte přihlášení pomocí účtu root

  2. Ve skriptu Bash Jak funguje příkaz Continue s vestavěnými smyčkami?

  3. Bash Tcp Redirection Konec přenosu?