Bazı Linux terminal komutlarındaki bu semboller ne anlama geliyor? [kapalı]


12

AskUbuntu'da, çevresinde oldukça karmaşık görünen, içinde çok sayıda sembol bulunan birkaç komut gördüm. Bu komutların nasıl oluşturulduğunu daha iyi anlamak için sembollerin ne anlama geldiğini bilmek istiyorum.

Örneğin:

find ~/ -name \*.c -exec sed -i "s/cybernetnews/cybernet/g" {} \;

veya daha da karmaşık:

echo -e "\e[${i#*=}m$( x=${i%=*}; [ "${!x}" ] && echo "${!x}" || echo "$x" )\e[m"

Olarak çok iyi ifade ederek parametrelerini tanıyıp -c, --debugana Commmand üzerindeki belirli etkileri vardır. Bunların anlamları neredeyse her durumda mansayfalarda bulunur, bu yüzden gerçekten aradığım şey bu değildir.

Lütfen verdiğim örnekleri açıklamak yerine sembollerin özel olarak ne yaptığını tanımlamak için cevabınızı deneyin. Bu şöyle görünebilir:

" means 'argument': the main command uses anything within these symbols as its source
^ is used for ...
# is used for ...

Şimdiden teşekkürler


Komuta bağlı olarak -c -Dkomut 1'de bir şey ve komut 2'de tamamen farklı bir şey anlamına gelebileceğini düşünüyorum .
Uri Herrera

hey 1. komutu değiştirdin mi? düzenleme nerede: X
Rinzwind

Ben bilgilendirici olmayan şeyler tutuyordu çünkü 1 yorum değiştirdi. Mümkün olduğunca göreceli örnekler göstermek istiyorum. Bunun için ilgili bölümde bir düzenleme yorumu yaptım. -C -D şeyler için teşekkürler, anladım. Soruyu güncelledim.
Exeleration-G

Yanıtlar:


14

Bkz Bash adlı bölümü Shell-Operasyon ve İleri Bash-Komut Kılavuzu Bölüm 3 (Özel Karakterler) .

Ubuntu / linux'da kabuk komut dosyası oluşturma hakkında yeni bir şeyler öğrenmem gerektiğinde bunlara başvuruyorum.

ABS Bölüm 3'ü amaçlarınız için gezinmenin en kolay yolunu bulacağınızı düşünüyorum. Tüm simgeler sayfanın en solunda, hemen altında bir açıklama ile gösterilir.


Gelişmiş Bash-Scripting Kılavuzu - Bölüm 3 harika. Teşekkürler.
Exeleration-G

Gelişmiş bash-scripting kılavuzunun 3. bölümündeki liste eksik ve kısmen yanlış. Gelişmiş Bash Scripting kılavuzu, bash öğrenmek için iyi bir kaynak değildir. Bunun yerine mywiki.wooledge.org/BashGuide ve mywiki.wooledge.org/BashFAQ adresine bakın .
geirha

@geirha ABS'nin çok yardımcı olduğunu gördüm, ancak belirli bir komuttaki semboller için bunun yerine man sayfalarına bakmayı seviyorum ve bağlantılarınız da harika - yer imi. Teşekkürler.
SaultDon

7

Ne yazık ki man sayfalarına gitmelisiniz, çünkü "semboller" hangi komutu okuduğuna bağlı olarak farklı anlamlara sahip olabilir.

Örneğin, ilk komutunuzda {} ve \; find komutuna bağlıdır (man find). Sed için bir argümandaki tırnakların anlamı sed veya bash'a bağlıdır (alıntılanan bir parametre olduğundan potansiyel olarak kabuklu bir şey olabilir). ~ / Kesinlikle bir bash paterni açılımıdır.

İkinci karmaşık komut için, çoğunlukla yankılanan şeyler, bu yüzden bash'ın man sayfasında bu konuda çoğu bilgiyi bulacaksınız.

Buna yorumunuzu cevaplamak için yönlendirme karakterleri> <| dosyalardan ve dosyalardan (işaretlerden daha büyük ve daha küçük) bir şeyleri borulamak ve bir komutun çıktısını başka bir girdiyle (boru |) bağlamak için kullanılır. G / Ç yönlendirmesi hakkında güzel bir eğitim için buraya bakın , bu Unix kabuğunun ve araç setinin çok güçlü bir tasarım özelliğidir.


Tamam, ne olacak >? Bu da sık sık gördüğüm bir işaret, 'kopya' ya da başka bir şey demek olduğunu düşündüm. Bu da komuta bağımlı mı?
Exeleration-G


3

Birincisi, sed'in aradığı ve içine değiştirdiği .cdizin ~/ve executes sed(düzene editörü) ile biten dosyaları arar .scybernetnewscybernet

İkincisi beni atlatıyor ... infaz edildiğinde boş bir sonuç gösteriyor.


Bu çok olasıdır, çünkü burada başka bir sorudan alınmıştır. Bağlam olmadan, muhtemelen hiçbir şey yapmaz.
Exeleration-G

2

Terminal komutlarını öğrenmek için bulduğum en iyi kaynak LinuxCommand , mevcut en çok kullanılan komutların ayrıntılı açıklamalarını veriyor.


bozuk bağlantı, lütfen güncelleyin veya silin.
2017'de

2

Karmaşık komutları yapıştırırken sembollerin tam anlamını söylemek zor.

Özellikle yankı.

-E için insan yankısına bakın, kaçmayı mümkün kılar, böylece daha geç bir kaçış olur.

Diğer sembollerin çoğu dize manipülasyonlarıdır.

Yani bir değişken "i" foo "içeren bir değişken var düşünün

i=foo;echo $i
foo

Ancak değişkeniniz $ i de bir dizenin parçasıysa daha karmaşık hale gelir

echo $ibar # Note: no output

echo ${i}bar # we have output
foobar

Artık dizeleri de değiştirebilirsiniz, sadece bir kısmını yazdırabilirsiniz

Senin durumunda

$ {i # * =} = print $ i, * ve = arasında en kısa eşleşmeyi kaldır, ancak * kendisi bir joker karakterdir ..

echo ${i#o}
foo

echo ${i#*o}
o

Bkz. Http://tldp.org/LDP/abs/html/string-manipulation.html

Sonra bir alt kabuk vurduk (x ...)

Bash, alt kabuktaki komutları işler ve komutların çıktısını döndürür.

x = (i'nin bir alt dizesi); devam et

Şimdi bir testimiz var, ["$ {! X}"]

Bkz. Http://tldp.org/LDP/abs/html/testconstructs.html

Ve işte size daha fazla anlatamayacağım yer.

Bash'da $ {! X} boş bir dize olacak. && == mantıklı ve || mantıklı veya

{boş dize} test et VE boş dize veya eko x yankı

Daha fazla sözdizimi vermeniz gerekir, ancak bu yankı bir yerlerde çıktısını pipetliyor gibi görünüyor.

Yine [] bir testtir ve biz en başından [] geçtik.

Böylece yankının ne yaptığını çok açıklayabilirim.

Bir terminale echo komutunu girdiğinizde çıkış olmamasının nedeni, bir kod snipitidir, varsayılan olarak ne x ne de i tanımlanmamıştır, bu nedenle tüm çıkış boştur.


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.