Unix'te çok kelimeli bir komutun diğer adını takma yolu var mı?


11

Komutu takma adı denemeye çalışıyorum sudo shutdownama bence .profilesadece yapamam alias "sudo shutdown"="my command". Unix'te çok kelimeli komutları takma ad etmenin başka bir yolu var mı?


Tüm bu teknikleri denedim ve hepsi çalıştı! Herkese teşekkürler!
agentbanks217

Düzenlememdeki çözümü de deneyin , çünkü gerçekten 'sudo kapanma'yı biraz takma ad olarak almayı amaçladığınızı fark ettim.

Yanıtlar:


19

Takma ad adı soldadır, böylece sağda herhangi bir çok kelimeli komutunuz olabilir:

alias my_alias="multi worded command"

DÜZENLEME: Ancak, gerçekten birden çok sözcüğün diğer adlarının olmasını istiyorsanız - örneğin, gerçekten "sudo shutdown" (takma ad) olmasını istiyorsanız, aşağıdaki takma ad özelliğini (bash kılavuzunda) kullanarak bu sorunu çözebilirsiniz. ):

A trailing space in  value causes the next word to be checked for
alias substitution when the alias is expanded.

Yani, hala sudodiğer komutlarla kullanmak istiyor ancak kullanmıyorsanız ve başka bir şeyin shutdowntakma adını göze alabiliyorsanız shutdown, sahip olabilirsiniz:

alias sudo='sudo '
alias shutdown="echo nope"

Şimdi, sudo anything_elsebeklendiği gibi çalışacaktır (sizin için bir takma adınız olmadığı varsayılarak anything_else, ancak varsa, daha önce de işe yaramazdı); ancak sudo shutdowneşdeğer olur sudo echo nopeve bu dizeyi yazdırır.


2
Teşekkürler, yetersiz cevap; Bir yerden bir yere daha kolay atlamak için alias cd="cd "tek harfli takma adlarla kullanıyorum alias X="<directory-with-long-name>".
Luke Davis

Katılıyorum, bu aslında süper yararlı. Git komutlarını yanlış yazıyorum, bu benim için çözüyor: alias gti="git "vealias lgo="log"
BananaNeil

4

Bir işlev kullanın:

foo() { if [ "$1" = "bar" ]; then echo "doing something..."; fi; }

Muhtemelen bir elsedurum istersiniz, böylece ikinci parametre aşağıdaki değilse orijinal komut çalışır bar:foo() { if [ "$1" = "bar" ]; then echo "doing something..."; else command foo "$@"; fi; }
davidg

2

Alıntı yapmak için: Bash: Takma ad alanındaki boşluklar

Bash dokümantasyon devletler "Hemen hemen her amaç için, kabuk işlevleri takma adlara tercih edilmektedir." Argüman (yalnızca) içeriyorsa ls, çıktıyı değiştiren ve çıktıya pipetlenmesine neden olan bir kabuk işlevi .more-la

ls() {
    if [[ $@ == "-la" ]]; then
        command ls -la | more
    else
        command ls "$@"
    fi
}

Tek astar olarak:

ls() { if [[ $@ == "-la" ]]; then command ls -la | more; else command ls "$@"; fi; }

Otomatik boru çıkışı:

ls -la

1

Kısa çizgi, geçici çözüm olarak kullanabilirsiniz: alias sudo-shutdown="your command"


1

Ben sadece çalıştırmak istediğiniz komutları içeren / usr / local / bin (yolunuzda olduğundan emin olun) yürütülebilir bir dosya koymayı tercih ederim. Komut dosyasının adı, gelen komut olacaktır. chmod + x / usr / local / bin / komut dosyanızın olduğundan emin olun.

Yani betiğe 'kapatma' denebilir

Dosya kapanmasının içeriği:

#!/bin/sh
sudo shutdown

Bu tamamen yeni bir dünya açar. Daha sonra birkaç komutunuz veya bir komut dosyanız olabilir:

#!/usr/bin/env python
print "hi"
# more stuff. ....
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.