Dizin başına temelinde takma ad nasıl ayarlanır?


18

Bir takma adınız olduğunu go, ancak farklı dizinlerde farklı şeyler yapmasını istediğinizi varsayalım ?

Bir dizinde çalışması gerekir cmd1, ancak başka bir dizinde çalışması gerekircmd2

Bu arada, yukarıdaki dizinlere geçmek için bir takma adım var, bu yüzden gotakma ad atamasını takma ada eklemek mümkün foomü?

alias "foo=cd /path/to/foo"

OSX'te bash (?) İle çalışma.


1
Makefiles bunun için.
itsbruce

Yanıtlar:


16

Ne sorduğunuzdan tam olarak emin değilsiniz, ancak bir takma ad yalnızca takma adda olana genişler. İki takma adınız varsa, farklı komutları, hatta takma adları ekleyebilirsiniz.

alias "foo=cd /path/to/foo; go"
alias "foo2=cd /path/to/foo2; go"

Başka herhangi bir durumda, .bashrc

function go ()
{
    if [ "$PWD" == "/path/to/foo" ]; then
       cmd1
    elif [ "$PWD" == "/path/to/go" ]; then
       cmd2
    fi;
}

Daha fazla seçeneğiniz varsa, bir vaka yapısı daha iyi kullanabilirsiniz.


4

Çok "dizin odaklı" olduğunuzu hissediyorum ve bu durumda, bu zihninizi daha iyi bir hale getirebilir.

(Ama dürüst olmak gerekirse, bence bu tamamen kötü bir fikir, komutların küresel olmasını istiyorsunuz.)

Olarak .bashrcsöylemek gerekirse, alias go="./.cmd"(o source ~/.bashrc).

Sonra, bu tür her dizine, denilen bir komut dosyası koyun .cmd, sonra chmod +x .cmd, sadece goişinizi yapın.


2
Bu çok fazla iş ... işte kullanım örneği: Testleri çalıştırırken, belirli testleri çalıştırmak için rspec-all'u takma adla istiyorum. Ancak hangi testler projeye bağlıdır. Ve bu dizin tarafından belirlenir.
B Seven

2
Ne görebilirim, iki seçenek var, ya bir işlevi kullanın (yukarıda açıklanan @Bernhard gibi) ve dizine bağlı olarak şube (aynen söylediği gibi), ya da parametreleri dizinlere koyabilirsiniz. Bir düşünün, komut dosyaları olmak zorunda değil, sadece touch .TESTNO; echo 2 > .TESTNOher dizine bir dosya ( ) koyabilir ve sonra, işlevinizde, bu dosyayı arayın ve .TESTNO dosyasının hangi test numarasına göre dal içeriyor. Her ne kadar zor olmasa da, muhtemelen bunun için bir takma ad kullanamazsınız; bir işlev kullanmalısınız.
Emanuel Berg

2

Sadece bunu başaran bir proje üzerinde çalışıyorum. Şuna göz atın: localalias .

İşte bir demo:

resim açıklamasını buraya girin

Gerçekten komik go, demoda örnek olarak kullandım . Anahtarlama dizinleri (demo hakkında değiştirmek gerekir bir şey) göstermedim ama lakomut ile fonksiyonları gerçekten içinde tanımlanmış dizine yerel.


1
function go() {
  if [ ! -e "./.cmd1" ]
    then command go -a $1
    else command go -b $1
  fi
}

Benzer bir şey, ancak "git" varsayımı, belirli bir dizinde farklı işlevler istediğiniz bir komuttur.


1

.Bashrc'nize aşağıdaki işlevi eklerseniz

function cd () { 
  builtin cd "$@" && [[ -f .aliases ]] && . .aliases
  return 0
}

.Aliases dosyası olan bir dizine her cd yaptığınızda kaynaklanır.

Makinenizde başkaları dosya oluşturabiliyorsa güvenlik konusunda dikkatli olun.

Bu hile ile takma adlar asla kaldırılmaz, ancak işlevde istediğiniz kadar kod yazabilirsiniz.

ondir bu hileyi kullanıyor ve bir ton çan ve ıslık çalıyor.

http://swapoff.org/ondir.html#download


Bunun zeki olduğunu düşünmeme rağmen, güvendiği için tehlikeli görünüyor .bashrc. ( cronÖrneğin, bu işe yaramaz ).
ctbrown

Bashrc hakkında tehlikeli bir şey olduğundan emin değilim. Bunun takma adlar için standart / doğru yer olduğuna inanıyorum. Farklı oldukları ortamların doğasında var. Soruyu verin, gerekli olan farklı bir ortamdır. Cron'un benzer bir ortama sahip olmasını istiyorsanız, bir kullanıcı .bashrc'yi cron'da durdurmayacak bir şey yok . NB cronunun isatty ve chums kullanımı nedeniyle her zaman interaktif bir kabuktan farklı davranması beklenmelidir.
teknopaul

Doğru, bashrc'nin kendisi hakkında tehlikeli bir şey yok. Sorun, dizine değiştirilen işlemin bashrc kaynağı olmasını sağlamanın hiçbir yolu olmamasıdır. Etkileşimli oturumunuz bu bir şeydir. Bu dizinin, bash kabuğunu kullanabilen veya kullanamayan kullanıcılar ve işlemler arasında paylaşılması oldukça başka bir şeydir. .bash_aliases bazı sistemlerde bash diğer adları için tercih edilen konumdur.
ctbrown
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.