The ;token pemisah perintah, sehingga adalah baris baru. Seperti thenperintah terpisah, titik koma sebelumnya diperlukan untuk dapat menulisnya di baris yang sama. Titik koma setelah mkdirdan fisuperflous.
Andreas Riedmüller
Jawaban:
278
Pertama, dalam bash "[" hanyalah sebuah perintah, yang mengharapkan string "]" sebagai argumen terakhir, jadi spasi putih sebelum tanda kurung tutup (serta antara "!" Dan "-d" yang perlu dua argumen terpisah juga) penting:
Catatan: -pbendera menyebabkan direktori induk dibuat jika perlu.
Danijel
13
Ya Tuhan, saya tidak pernah tahu bahwa "[" adalah perintah. Ini menjelaskan banyak masalah saya ... Mudah hal paling berguna yang pernah saya baca di StackOverflow.
Ben Kushigian
1
Wow! Mengetahui bahwa "[" adalah perintah di bash adalah pembuka mata. Saya merasa seperti banyak masalah dengan skrip bash saya sekarang telah diselesaikan!
raluru
93
Sebenarnya tidak perlu memeriksa apakah itu ada atau tidak. Karena Anda sudah ingin membuatnya jika ada, mkdir akan melakukannya
Argumen -ptersebut tidak mengabaikan kesalahan: ia memunculkan mode berbeda di mana komponen jalur yang tidak ada dibuat (dan karenanya itu bukan kesalahan jika terjadi bahwa nol perlu dibuat). Perilaku ini berbeda karena akan membuat komponen selain yang terakhir, yang mungkin atau tidak diinginkan.
BeeOnRope
23
Anda membutuhkan ruang di dalam [dan ]kurung:
#!/bin/bashif[!-d /home/mlzboy/b2c2/shared/db ]then
mkdir -p /home/mlzboy/b2c2/shared/db
fi
mmh, tidak bersih: hanya lebih pendek. Sulit untuk memahami arti dari pernyataan seperti itu jika Anda menemukannya.
Davide Orazio Montersino
1
Saya suka ini, meskipun -pargumen membuat cek tidak perlu. Anda masih dapat menggunakannya ketika Anda tidak ingin menggunakannya -p, yaitu ketika Anda tidak ingin semua direktori induk dibuat secara otomatis.
ADTC
3
Sebenarnya lebih pendek untuk menulis [ -d /path/to/dir ] || mkdir /path/to/dir.. sisi kanan dieksekusi ketika sisi kiri salah.
ADTC
4
Saya pikir Anda harus memformat ulang kode Anda sedikit:
;
token pemisah perintah, sehingga adalah baris baru. Sepertithen
perintah terpisah, titik koma sebelumnya diperlukan untuk dapat menulisnya di baris yang sama. Titik koma setelahmkdir
danfi
superflous.Jawaban:
Pertama, dalam bash "[" hanyalah sebuah perintah, yang mengharapkan string "]" sebagai argumen terakhir, jadi spasi putih sebelum tanda kurung tutup (serta antara "!" Dan "-d" yang perlu dua argumen terpisah juga) penting:
Kedua, karena Anda menggunakan -p beralih ke
mkdir
, pemeriksaan ini tidak berguna, karena ini adalah apa yang dilakukan. Tulis saja:dan itu saja.
sumber
-p
bendera menyebabkan direktori induk dibuat jika perlu.Sebenarnya tidak perlu memeriksa apakah itu ada atau tidak. Karena Anda sudah ingin membuatnya jika ada, mkdir akan melakukannya
sumber
-p
bendera menyebabkan direktori induk dibuat jika perlu.Cukup lakukan:
mkdir akan melempar kesalahan jika folder sudah ada. Untuk mengabaikan kesalahan tulis:
Tidak perlu melakukan pengecekan atau semacamnya.
Sebagai referensi:
-p, --parents no error if existing, make parent directories as needed
http://man7.org/linux/man-pages/man1/mkdir.1.htmlsumber
-p
tersebut tidak mengabaikan kesalahan: ia memunculkan mode berbeda di mana komponen jalur yang tidak ada dibuat (dan karenanya itu bukan kesalahan jika terjadi bahwa nol perlu dibuat). Perilaku ini berbeda karena akan membuat komponen selain yang terakhir, yang mungkin atau tidak diinginkan.Anda membutuhkan ruang di dalam
[
dan]
kurung:sumber
Cara bersih, manfaatkan evaluasi jalan pintas operator logis shell. Sisi kanan operator dieksekusi hanya jika sisi kiri benar.
sumber
-p
argumen membuat cek tidak perlu. Anda masih dapat menggunakannya ketika Anda tidak ingin menggunakannya-p
, yaitu ketika Anda tidak ingin semua direktori induk dibuat secara otomatis.[ -d /path/to/dir ] || mkdir /path/to/dir
.. sisi kanan dieksekusi ketika sisi kiri salah.Saya pikir Anda harus memformat ulang kode Anda sedikit:
sumber