Diğer ad tarafından gölgelenmiş bir komut çalıştırın.


163

Diyelim ki bash'da şu takma adı var - alias ls='ls --color=auto'- ve seçeneksiz normal çağırmak istiyorum ls. Bunu yapmanın tek yolu unalias, komut ve sonra yeniden takma addır. Ya da bazı güzel hile veya geçici çözüm var?


2
Aşağıdaki cevapların bazıları hakkında sadece bir not: "command" bunu başarmanın SADECE güvenli yoludur. Örneğin, "." veya "kaynak" yerleşik, komut dosyası tanımlı bir işlev tarafından geçersiz kılınabilir. "komut" veya "komut kaynağı", kodu tanımlanmış işlev yerine çağrılmadan kaynağı güvenli bir şekilde yürütmenin tek yoludur. Ters eğik çizgi yöntemi "\.", İş ve tabii ki dahil olmak üzere diğer alternatiflerin hiçbiri, tam yolu belirterek çağırabileceğiniz "/ bin / source" alternatifi yoktur.
Dejay Clayton

Yanıtlar:


209

Ayrıca takma adı devre dışı bırakmak için bir eğik çizgi de ekleyebilirsiniz. \ls

Düzenleme: Aynı yapmanın diğer yolları şunlardır:

: "Komutunu" kullanın command lsgöre Mikel .

Tam yolu kullanın: /bin/lsuyarınca Uther'e .

Komutu alıntı: "ls"veya 'ls'Mikel yorumuna göre.

Bu terminal oturumu için diğer adını geçici olarak kaldırabilirsiniz unalias command_name.


Bu benim bunu yapmanın standart yoludur.
ncmathsadist

çok güzel, tcsh ile de iyi çalışıyor
Levon

10
Bu yol çok faydalı. Sadece farklı kılan hangi, takma ad değil fonksiyonlarını atlar commandya builtin.
Mikel

1
l\sAynı şeyi yapıyor gibi görünüyor . Bu davranış bir hata mı yoksa bir özellik mi?
Niklas B.

4
Bu bir "özellik". Yalnızca alıntılanmamış takma adlar genişletilir. Böylece, tırnak işaretleri içine alabilir veya istediğiniz bir yerde ters eğik çizgi kullanabilirsiniz. Bash aliases referansına bakınız .
Mikel

79

Yani ne commandkomut içindir.

Deneyin

command ls

Bu, kabuğa diğer adları ve işlevleri atlamasını söyler.

Bu yol bash , zsh ve ash / dash ile desteklenir.


2
En iyi cevap, neden olsa en çok oyu alamadı? :) +1
0xC0000022L

11
Çünkü ters eğik çizgi yöntemi olarak 8 kez karakter sayısını ekler
JoelFan

1
@STATUS_ACCESS_DENIED Bu, tcsh ile de çalışmaz (ve bu nedenle de muhtemelen csh ile değil). `\` Yöntemi yok
Levon

3
Ters eğik çizgi özelliği güvenli değil. Benzer şekilde adlandırılmış diğer adlara karşı koruma sağlarken, benzer şekilde adlandırılmış işlevlere karşı koruma sağlamaz.
Dejay Clayton

2
@JoelFan Çok fazla karaktere sahip olmayı çok isterdim ve senaryolarımın herkes için izlemesi ve çalışması kolay olur. Sezgisel olmayan, kaçırması kolay, iyi belgelenmemiş ve işlevleri atlamak için çalışmayan şifreli bir eğik çizgi yerine.
Dennis,

19

Takma ad yalnızca tanımlanmış bir kısayol. Bu örnekte, tanımlanan diğer adı dizesi ls, yürütür ls --color=auto. Bu davranışı istemiyorsanız ls, mutlak yolu kullanarak ikili dosyayı çağırabilirsiniz .

Yani çalıştırmak sadece /bin/lsçıktı vermeden renk üretecektir çünkü tanımladığınız takma ad değildir.

Ayrıca takma adı farklı bir şeyle değiştirebilir veya lsrenk parametreleri olmadan çalışan yeni bir takma ad ekleyebilirsiniz .


2
Komutun nerede olduğunu bilmek zorundasın. Bazı sistemlerde, arasındaki ayrım /binve /usr/binkeyfidir.
Keith Thompson

Bunun için @KeithThompson şunu kullanabilirsiniz whichbazı komutlar için: which ls.
cst1992

@ cst1992: Kullanacaksanız which(veya type), üzerinden bir arama yapar $PATH; sadece yolu belirtmekten çok kullanabilir lsveya kullanabilirsiniz \ls.
Keith Thompson

10

@ Uther'in cevabına dayanarak başka bir yol, çalıştırılabilirin yolunu otomatik olarak bulmak için kullanmak $(which ...)veya `which ...`(geri tepmeleri kullanmak ``) kullanmaktır . Bu işe yarayacak bash:

$(which ls)

`which ls`

Kuşkusuz, sadece komutu öneklemek için \çok daha kısadır.

GÜNCELLEME : Takma ad komutunda 'hangisini' nasıl kullanılır 'a göre ? , bu hiç güvenilir görünmüyor.


Destekler ne için? Sanırım `which ls`ikili dosyayı doğrudan çalıştırmak demek istiyorsun .
amyassin

2
@ amyassin: Her iki sözdizimi de aynıdır. (BTW, backticks'leri kod formatlamasına nasıl
soktunuz

Aslında (which ls)benim için işe yaramadı (Ubuntu 12.04 LTS'de) Ve geri tepmeler çok zordu, ben sadece onlardan kaçtım: \ `Hangi l \ \`. Oraya gitmek için çok fazla düzenleme yapıldı :)
amyassin

1
@ user946850 "Bir kod aralığı içine değişmez bir backtick karakteri eklemek için, açılış ve kapanma sınırlayıcıları olarak birden çok backtick kullanabilirsiniz". Kaynak: Markdown Referans .
Mikel

@amyassin: Eklediniz mi $?
krlmlr

2

Şahsen, ben sadece komutları aynı isimler ile takma ad tanımlamaktan kaçınır, bu yüzden lsher zaman gerçek komutu çağırır. Ben gibi seçeneklerin çeşitli kombinasyonları için diğer adlarını veya fonksiyonlara sahip l, llve lg. (Bu unalias lsbenim .bashrcveya ihtiyacım olan anlamına gelir .cshrc.)

OS'nin hangi seçenekleri tercih edebileceğim konusundaki varsayımlarının ( lskomutun tasarımcılarının varsayımlarını geçersiz kılarak ) kendi kişisel zevklerime nadiren uyduğunu biliyorum . Görünümünden hoşlanmıyorum ls --color=autove okunaklı olması siyah beyaz ile siyah beyaz arasında çok büyük farklılıklar gösterebilir.

YMMV ve diğer çözümler elbette bilmek hala iyidir.


1

Komutu büyük harfle yazmak, LSnedenini tam olarak bilmediğim halde çalışıyor gibi görünüyor .


4
Hangi kabukta, hangi işletim sisteminde, hangi terminalde vs.
Mikel

@Mikel "ls" olarak "sl" sağlayan bir "sl" paketi vardır. Ubuntu’da verilen bash ipuçları ayrıca “LS” nin “sl” tarafından sağlandığını söylüyor.
Izkata

1
Mac OS X 10.7'de bash 4 (Fink ile yüklü) bulunur. Ayrıca rm ve grep gibi takma isimlendirdiğim diğer komutlar için de geçerlidir.
asmeurer

3
Bu sadece bir şaka :) mn sayfasından:LS - display animations aimed to correct users who accidentally enter LS instead of ls.
amyassin

7
Bunun Mac OS X için işe yaradığını düşünüyorum çünkü dosya sistemi varsayılan olarak büyük / küçük harf duyarlı değildir. Diğer unixlerde işe yaramaz.
Jander
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.