Standart komutlar üzerinde takma ad neden önerilmez?


19

Örneğin, ~/.bashrcdosyada (veya eşdeğerlerinde) gördüğüm yaygın bir takma ad

alias rm='rm -i'

Ancak, insanların buna karşı tavsiye ettiğini gördüm çünkü

  1. takma ad başka bir sistemde bulunmayabilir ve dikkatsiz olduğunuzdan rm, önemli bir şeyi yanlışlıkla silmiş olursunuz. [1]
  2. bu takma adı kullanarak, aslında tüm amacı yenen her komuttan sonra yveya yazmak için kendinizi eğitirsiniz .yesrm

Buna karşı önermek için başka nedenler var mı? Bazı programlar rmbunun yerine sadece arama yapabilir \rmve takma adlar onlar için sorunlara neden olabilir mi?

Ben rmsadece örnek olarak kullanıyorum ama takma adlar gibi cpya da mvtakma adlar tarafından kapsanan diğer komutları da gördüm . Şahsen, yavaş yavaş kendimi bunun yerine böyle bir takma ad kullanacak şekilde eğitiyorum rm -i:

alias trash=`mv -v -t $HOME/.Trash`

3
Varsayılan takma adı olan bir sisteme her gittiğimde rm -i, -fbayrağı otomatik olarak eklemek için biraz daha eğitiyor .
Jander

İstediğiniz her rm -işeyin takma adını yapabilirsiniz . Mesela del, irmvb Sen yok gerek takma o için rm. Bu nokta 1'i atlatır ve seçici olarak kullanarak delveya rmne istediğinize bağlı olarak, nokta 2'yi bir dereceye kadar atlatırsınız.
Martin Tournoij

Yanıtlar:


8

Bash kullandığınızı varsayarsak, etkileşimli olmayan bash kabukları kaynaklanmadığı ~/.bashrcveya ~/.bash_profile(takma adlarınızın yerleştirildiği yer olması veya takma adlarınızı başka bir komut dosyasında almanın ilk adımı olduğundan) komut dosyaları için sorunlara neden olmamalıdır. . Ancak, komut dosyaları kaynak kullanıyorsanız sorunlara neden olabilir:

$ alias echo='command echo foo'
$ cat > script << 'EOF'
> #!/bin/bash
> echo bar
> EOF
$ chmod a+x script
$ ./script
bar
$ . ./script
foo bar

Sorunuz, mevcut komutlar üzerinde diğer adın takılması konusundaki genel endişelerin çoğunu kapsıyor; bunlardan en önemlisi, ilk bakışta aynı görünen yabancı ortamların potansiyel olarak çok farklı sonuçlar üretebilmesidir. Örneğin, aliasing rmiçin rm -iiyi niyetli, ancak devlet nedenlerle pratikte kötü.


7

"Buna karşı önermek için başka nedenler var mı?"

Elbette:

(3) Çünkü bir gün , standart komutların diğer adlarının standart olmasına rağmen, standart komutları taklit etmek için başkalarını azarlayan [-----------] ve paranoyak insanlar tarafından inşa edilen temellere eklemeyi umuyorum .

Cidden, bunlar sadece uyarılar. Eğer bu kıyamet çukurlarından birine düşmemeye kendinize güveniyorsanız, dikkatli olun ve devam edin.

Şahsen ben çok az standart komut takma adı; Küçük varyasyonlar kullanıyorum çünkü sadece biraz paranoyak ve anal tutucuyum. Ancak bunun için bulduğum iyi bir kullanım, genellikle root veya başka bir kullanıcı olarak oturum açtığım sistemler ile ilgilidir ve yanlışlıkla / tembel olarak root olarak çalıştırmak istemediğim bazı şeyler vardır:

alias irc="echo \"No you don't!\""

veya

alias irc="su irc_user"

4

Aşırı bir örnek olarak, standart komutların diğer adlarının neden zararlı olabileceğini göstermek için standart bir komutun diğer adını takas etmeme izin verin:

alias ls='rm'

Açıkçası, bu kötü çünkü bir gün kötü bir sürpriz yaratacaktır. Benzer şekilde, standart komutların takma adlarla değiştirilmesi, en azından beklediğinizde talihsiz bir sürprizle sonuçlanacaktır.

Ama kariyerinde ilerledikçe hemen hemen her Unix yöneticisinin başına gelecek ortak bir senaryo sunayım:

Gelecekte bir gün yeni bir işe başlayacak ve başkaları tarafından kurulan yeni bir sistem üzerinde çalışacaksınız. Cumartesi sabah saat üç olacak ve dümdüz düşünmüyorsunuz ve hata yapmaya eğilimlisiniz. Standart ortamınız kullanılamayacak. Aslında sen köksün.

Bu göz önüne alındığında rm, bunun takma adı olmadığını hatırlayacak rm -imısınız? Kutuya her giriş yaptığınızda özel takma adlarınızı kontrol edecek misiniz? Kökün çevresini değiştirirseniz, iş arkadaşlarınız değişikliğinizden memnun olur mu?

Dürüst olmak gerekirse bu konuda kararsızım. Kariyerimde binlerce sistem üzerinde çalıştım ve tüm bu sistemlerde çevreyi değiştirirsem değeri görmek zor olurdu.

Aliasing rmiçin rm -içok yaygın olduğunu ve bunu birçok sorunu önlemek gördük, ama aynı zamanda pek çok sürprizler ve yanlışlıkla silinen dosyaları kurtarmak için ekstra çalışma saatleri neden oldu.

Şimdi ortak sistem komutlarını yumuşatmaktan kaçınmaya çalışıyorum. Bunun yerine, kabuğun kolayca yapamayacağı şeyleri yapmak için takma adlar ve işlevler kullanıyorum. Şimdi yapmak eğilimindedir takma adı için ekstra bir mektup eklemek, gibi:

# List long, with color or special characters, depending on OS
alias  ll='ls -l'
# Long, with metacharacters, show dotfiles, don't show . and ..
alias lll='ls -lA'
# Long, with metacharacters, show dotfiles, show . and ..
alias lla='ls -la'
# List just the dotfiles
alias  l.='ls -l -Ad .????*'

# Useful greps
#alias hgrep='history |grep ${*} |grep -v $$'
alias greph='history |grep ${*}'
alias grepp='ps -ef |grep ${*}'

### Highlight some text.
# From http://unix.stackexchange.com/questions/366/convince-grep-to-output-all-lines-not-just-those-with-matches/367#367
highlight () { grep --color -E "$1|$" $2 ; }

Ve belki de son takma adımdan gerçekten kurtulmalıyım, çünkü yeni uygulamalara adapte olmak zaman alır:

# For safety!
alias rm='rm -i'

8
Bayrakları lshatırlamak on takma ad hatırlamaktan daha uygun olabilir.
Bernhard

Çok doğru. Ve aslında, bu takma adları nadiren kullanıyorum. Neden hala sahip olduğumdan emin değilim, daha karmaşık takma adların (ve işlevlerin) anlaşılması zor ve referans için iyi. Basitlik için muhtemelen onları kaldırmalıyım.
Stefan Lasiewski

"İllüstrasyon" (ilk örnek) gerçekten kullanışlı değil. Bu açıkça kötü niyetli ve bir sistemin bubi tuzağının zararlı olabileceğini biliyoruz. Sizin rm-> rm -iörnek çok daha iyidir. Başka bir iyi bir şey şeyler koymak için rm takma bir olurdu~/.trash
derobert

1
@Bernhard: Doğru, ancak takma adların yazılması daha hızlı. (Ama on ne olursa olsun çok fazla.)
Emanuel Berg

2
@StefanLasiewski: İpucu: Sadece estetik nedenlerle gösterilmeyen şeyleri asla çıkarmayın. Sizi aktif olarak rahatsız etmedikçe onların kalmasına izin verin. Bu kadar hızlı bir eylemdir, kurduktan sonra harcadıktan sonra bir şeyleri kaldırır; ve eğer pişman olursanız, sadece izin vermedikleri için aptal gibi hissedersiniz.
Emanuel Berg

4

Bunun daha fazla tehlikesi var.

Örneğin, shell-commandEmacs'ta kullanırsanız , "your" komutunu (veya takma adı) aldığınızı düşünebilirsiniz , ancak lsbir terminalde takma adı ayarlama, diğer komutlar gibi ...) - aslında (Emacs'a geri dön), (hizalanmamış) komutunu alırsınız. Emacs bunu sorunsuz bir şekilde uygulayacaktır, böylece yeni olanlara bile kör olabilirsiniz!

Farklı bilgisayarlar ve / veya sistemlere gelince, .rchepsi için ayrı dosyalar kurmanın çok sıkıcı olduğunu düşünüyorsanız , sadece böyle bir dosyaya sahip olabilirsiniz, ancak ifözelleştirmek için yan tümceleri vardır.

Örneğin, her işlevi yazarken değerlendirmek yerine, bunlardan herhangi birinde sorun yaşadığınızda, bunları "kara listeye" ekleyin, son olarak:

if [[ `uname` == "SunOS" ]]; then
  unset -f mic cpkeep mcp mcph cpindex cpconf # not for Solaris
fi

3

Standart komutları takma adlarla (yani, rm=rm -i) yeniden adlandırmak , takma adın kullanılamadığı yerlerde sürprizlere yol açabilir. Böyle kullanmamayı tercih ediyorum ve (birkaç acı, acı deneyimle ;-) Her komutu iki kez okumaya alışkınım ve eğer rmya mvda herhangi bir şey potansiyel olarak üç kez yıkıcıysa. Ve bu tür takma adlar otomatik "rm foo" ENTER "y" Hata! neyse (ve her seferinde ekstra bir tuşa basma maliyeti).

Ama bu sadece benim. Yabancı ortamlarda (diğer makineler, diğer kullanıcılar, ...) çalışmayı beklemiyorsanız ve en sevdiğiniz takma adları nerede olursanız olun yükleyebilirsiniz. Unix, kullanıcılarına kendi ayaklarını vurmak için fazlasıyla ip verdiği biliniyor.


0

Diğer cevaplar iyidir, ama hepsi sadece sizi nasıl etkilediğine bakar.

@Stephan Laswieski'nin cevabını biraz kafaya çevireyim.

Her şeyi bilen olmadığınızı varsayarsak, kullanıcı hesabınızda başka birinin çalışmasını veya bir şeyi nasıl yapacağınız konusunda size tavsiyede bulunmanız gerekebilir.

Sonra, bir şey yaptıkları veya bunu yapmanızı söylediklerinde, beklendiği gibi çalışmayabilir.

En iyi ihtimalle, onlara ne olduğunu açıklamak için zaman kaybetmeniz gerekecek (eğer tam oradaysanız ve soruna neden olan takma ad olduğunu hatırlayabilir veya anlayabilirseniz).

En kötüsü, diğer cevaplardan birinde örnek üzerinde bir bükülmeye bakın: alias ls = 'rm -rf'.

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.