Bu sorunun göründüğünden biraz daha az masum olduğunu düşünüyorum diyerek başlayacağım.
Ne yapmam gerekiyor: PATH ortam değişkeni içinde bir klasör olup olmadığını kontrol edin. Başlangıçta veya sonrasında olabilir. Sadece o klasörün orada olduğunu doğrulamam gerek.
Benim sorunuma bir örnek - hadi kullanalım /opt/gnome
.
SENARYO 1: klasör YOLUN başında değil
# echo "$PATH"
/sbin:/usr/sbin:/opt/gnome:/var/opt/gnome
# echo "$PATH" | grep ":/opt/gnome"
/sbin:/usr/sbin:/opt/gnome:/var/opt/gnome
Grep'in yakalanmaması için yeterince spesifik olması gerektiğini unutmayın /var/opt/gnome
. Dolayısıyla kolon.
SENARYO 2: klasör PATH başlangıcında.
# echo "$PATH"
/opt/gnome:/sbin:/usr/sbin:/var/opt/gnome
# echo "$PATH" | grep "^/opt/gnome"
/opt/gnome:/sbin:/usr/sbin:/var/opt/gnome
Bu benim sorunum - bu klasörle iki nokta üst üste veya satır başı aramam gerekiyor. Yapmak istediğim şu iki parantez ifadesinden biri:
# echo $PATH | grep "[^:]/opt/gnome"
# echo $PATH | grep "[:^]/opt/gnome"
ANCAK [^
ve [:
kendi anlamları var. Bu nedenle, yukarıdaki iki komut çalışmaz.
Bu iki senaryo için tek bir komutta grep edebileceğim bir yol var mı?
grep '^\(any number of other matches:*:\)*my match\(:.*\)*$'
/opt/gnome:
ya/opt/gnome$
, sen bulacaksınız/opt/gnome-foo
ya/opt/gnome/bar
.