GNU/Linux >> Belajar Linux >  >> Linux

Perbaiki Skrip Bash yang Mengharapkan Input Jalur Dengan / Di Ujung Putus Saat Jalur Tidak Berakhir Dengan /?

Saya punya kode ini :

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

Ini hanya berfungsi jika Anda memberikan jalur yang diakhiri dengan / seperti /root/ .

Apa cara yang benar untuk menambahkan / ke input jalur, dalam situasi seperti ini, tanpa merusak skrip saya?

Jika Anda memberikan input jalur tanpa / di akhir, itu hanya melakukan ini :

File: /root*png

Jika saya mengubahnya menjadi for file in "[email protected]"/*png; do dan masukan /root/test/ berhasil tapi hasilnya jelek :

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

Jawaban yang Diterima:

ilkkachu menunjukkan kelemahan besar dalam jawaban saya dan mengoreksinya, jadi tolong beri dia penghargaan yang pantas dia dapatkan. Saya telah menemukan solusi lain:

#!/bin/bash

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

Contoh :

$ 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

Solusi Asli :

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

${@%/} akan memangkas / dari akhir parameter Anda dan kemudian / di luar akan menambahkannya kembali — atau menambahkannya ke parameter apa pun yang tidak memilikinya.


Linux
  1. Nonaktifkan masuk dengan akun root

  2. Bagaimana Memberi Sinyal Akhir Dari Input Stdin?

  3. Bagaimana Cara Mengatur Parameter Saat Pipa Bash Script Ke Bash?

  1. Dalam Skrip Bash Bagaimana Perintah Lanjutkan Bekerja Dengan Loop Tertanam?

  2. Bash Tcp Redirection Akhir Transmisi?

  3. Bagaimana skrip bash dapat mengetahui direktori tempat ia diinstal ketika bersumber dari . operator?

  1. Di Bash, Kapan Alias ​​​​Kapan Skrip, Dan Kapan Menulis Fungsi?

  2. Mengapa Skrip Bash Tidak Mengenal Alias?

  3. Mengapa ~/.bash_profile Tidak Berfungsi?