Kabuk betiğindeki yol değişkenlerinin sonunda eğik çizgi kullanmalı mıyım? [kapalı]


11

Bugün kabuk betiğimi yazarken.

Aniden aklıma bir soru geliyor.

Beri cd /target_dirve cd /target_dir/her ikisi de çalışır.
Bir kabuk komut dosyasında yol değişkenlerimin sonuna eğik çizgi eklemeli miyim?
Buna LOG_PATH=/data/nginx/logskarşı LOG_PATH=/data/nginx/logs/.

Google'da brüt arama yaptım, ancak bununla ilgili tartışma bulamadım, belki çok temel?

Şimdilik hangi stili seçeceğime karar vermem gerçekten zor.
Ama LOG_PATH=/target_dir/stili biraz daha tercih ettim .
Çünkü bash ile otomatik tamamlama yaptığımda, sonuç bana eğik çizgi ile çıkıyor.

Bunun hakkında ne düşünüyorsun, neden?



Kural yok. Her iki kodlama stilinin de bazı avantajları ve dezavantajları vardır.
andcoz

Yanıtlar:


9

POSIX'e göre:

Bir yol adının tanımı:

Bir dosyayı tanımlamak için kullanılan bir dize. İsteğe bağlı başlangıç <eğik çizgi> karakterleri, ardından <eğik çizgi> karakterleri ile ayrılmış sıfır veya daha fazla dosya adı vardır . Bir yol adı isteğe bağlı olarak bir veya daha fazla son <eğik çizgi> karakteri içerebilir . Birden ardışık <çizgi> karakterleri biri ile aynı olarak kabul edilir <eğik çizgi> , tam iki lider durumu için hariç <bölü> karakterler.


@ Ben hiç cd can olduğunu, ilginç //ve /farklı istemi bash isimlerini gösterisi ile ve kullanma pwdben farklı bir yol alırsınız gösterdi ama içerikleri aynıdır! Neden?
Zen


1
Çünkü bashgeçerli dizini çok saf bir şekilde, bir dize olarak izler. Sadece sezgisel olarak yola ekler ve kaldırır, gerçek dosya sistemine bağlanmaz. Bunun bir sonucu, sembolik bir bağlantıya cd yazıp aynı şekilde geri gelebilmenizdir (bash çok fazla olduğuna karar vermediyse ve yeniden başlattıysanız). Diğeri tarif ettiğiniz şey. Kabuğun geçerli dizini izlemesine güvenmemelisiniz, güvenilir değildir.
orion


6

Güvenli tarafta olmak için, eğik çizgiyi ekleyin. Bu, yolları birleştirirken birden çok eğik çizgiye neden olabilir, ancak en azından sorunlardan kaçınabilirsiniz.

Birkaç örnek: rsyncsonuna eğik çizgi eklenmişse yolları farklı şekilde ele alır ( başka bir alt dizin yapmak yerine bu dizini senkronize eder ). Dizinlere sembolik bağlar, bazen eğik çizgi olmadığında beklenmedik bir şekilde davranırlar - en azından kabuk tamamlama kafası karışır. Başlattığınız komutun / komut dosyasının eğik çizgi için özel bir davranış olup olmadığını asla bilemezsiniz. Hatta bir şeyin üzerine yazmaktan bile kurtarabilir. Örneğin, adında bir dosyanız varsa foo, ancak yanlışlıkla bir dizin olduğunu ve içinde bir şey taşımak istediğinizi düşünüyorsanız mv bar foo, dosyanın üzerine yazacaktır (veri kaybı, potansiyel felaket), ancak mv bar foo/şikayet edip hiçbir şey yapmaz.

Sonuç olarak, çoğu durumda önemli değil, ancak eğik çizgiyi kendinizi korumak ve bir senaryoda ne yapmak istediğinizi insan okuyucu için daha açık hale getirmek için kullanmalısınız. Sıradan bir gözlemci, bir değişkenin eğik çizgi ile bitiyorsa dizine başvurduğundan hemen emin olur ve değiştirilmesi gerekiyorsa doğru şekilde kullanır.


2

Hayır yapmamalısın. Ekstra gereksiz bir eğik çizgi ( /) ekler .

misal

java'nın bindizinini PATHdeğişkeninize aktarmak istediğinizi varsayalım ,

export PATH=$PATH:/opt/jre1.7.0_45/bin/

şimdi kontrol et,

user@host:~$ which java
/opt/jre1.7.0_45/bin//java

/Java önce ekstra eğik çizgi ( ) dikkat , ama neyse ki sadece bu durumda çalışır.


Bu linkte, yazarın eğik çizgi eklememiz gerektiğini düşündüğü 31 oy cevabı olduğunu gördüm. Kafam karıştı. stackoverflow.com/questions/980255/…
Zen

@Zen, evet kontrol ettim, Sorunuzun ilk yorumundaydı. Teşekkürler.
Arnab

6
Hiçbirinden daha iyi iki eğik çizgi. Bu çirkin ama güvenlidir ... diğer seçenek çok daha kötü ve tehlikeli olabilir.
orion
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.