Yanıtlar:
Deneyin:
alias lock='gnome-screensaver; gnome-screensaver-command --lock'
veya
lock() {
gnome-screensaver
gnome-screensaver-command --lock
}
.bashrc'nizde
İkinci çözüm argümanları kullanmanıza izin verir.
lock()parantez içine yerleştirmek hata syntax error near unexpected token mesajı verir. ''
$1, $2... fonksiyon gövdesindedir.
Diğer cevaplar soruyu yeterince cevaplar, ancak örneğiniz ikinci komutun başarılı bir şekilde çıkmakta olduğuna bağlıdır. Takma adınızda kısa devre değerlendirmeyi denemek isteyebilirsiniz :
alias lock='gnome-screensaver && gnome-screensaver-command --lock'
Şimdi ilk komut başarılı olmadığı sürece ikinci komut denenmeyecektir. Kısa devre değerlendirmesinin daha iyi bir açıklaması bu SO sorusunda açıklanmaktadır .
git fetch && git pull origin masterve yerime başkasının kadar benim için işe yaramadı &&ile ;.
Takma adlar, komut adlarının takma adı içindir. Bunun ötesinde her şey fonksiyonlarla yapılmalıdır.
alias ll='ls -l' # The ll command is an alias for ls -l
Takma adlar, hala orijinal adla ilişkilendirilmiş adlardır. llsadece biraz özel bir tür ls.
d() {
if exists colordiff; then
colordiff -ur "$@"
elif exists diff; then
diff -ur "$@"
elif exists comm; then
comm -3 "$1" "$2"
fi | less
}
İşlev, dahili mantığı olan yeni bir komuttur. Bu sadece başka bir komutun yeniden adlandırılması değildir. Dahili işlemleri yapar.
Teknik olarak, Bash kabuk dilindeki takma adlar o kadar sınırlıdır ki, tek bir komuttan daha fazlasını içeren herhangi bir şey için son derece uygundurlar . Onları tek bir komutun küçük bir mutasyonunu yapmak için kullanın, başka bir şey değil.
Amaç, diğer komutlarda dahili olarak çözülecek bir işlem gerçekleştiren yeni bir komut oluşturmak olduğundan, tek doğru cevap burada bir fonksiyon kullanmaktır:
lock() {
gnome-screensaver
gnome-screensaver-command --lock
}
Bunun gibi bir senaryoda takma adların kullanılması birçok soruna yol açar. Komut olarak yürütülen işlevlerin aksine, takma adlar geçerli komuta genişletilir ve bu, diğer adlarla diğer komutlarla birleştirildiğinde çok beklenmedik sorunlara yol açar. Ayrıca senaryolarda da çalışmazlar.
gps() { git commit -m 'init '; git push; git status; } Açıklandığı gibi, takma adlar son derece sınırlıdır, kırılgandır ve tek amacı komutları yeniden adlandırmaktır. Bunları alakasız amaçlarla kötüye kullanmak, az önce deneyimlediğiniz gibi sizi sıcak suya indirir.
Bu çalışmıyor mu?
alias whatever='gnome-screensaver ; gnome-screensaver-command --lock'
Bu yüzden noktalı virgül kullanın:
alias lock='gnome-screensaver; gnome-screen-saver-command --lock'
İlk komuta argüman sağlamak istiyorsanız bu işe yaramaz. Alternatif olarak, $ HOME / bin dizininizde önemsiz bir komut dosyası oluşturun.
Bu işlevi kendinize ekleyin ~/.bashrcve terminalinizi yeniden başlatın veya çalıştırınsource ~/.bashrc
function lock() {
gnome-screensaver
gnome-screensaver-command --lock
}
Bu şekilde, bu iki komut lockterminalinize her girdiğinizde çalışacaktır .
Özel durumunuzda bir aliasişe yaraması işe yarayabilir, ancak bunu önermiyorum. Sezgisel olarak, bir takma adın değerinin terminaldeki değeri girdiğiniz gibi çalışacağını düşünürüz. Ancak durum böyle değil:
Takma adların tanımı ve kullanımı ile ilgili kurallar biraz kafa karıştırıcıdır.
ve
Neredeyse her amaç için kabuk fonksiyonları takma adlara tercih edilir.
Yani gerekmedikçe takma ad kullanmayın. https://ss64.com/bash/alias.html
Takma ad bildirirken bir sorunla karşılaştım ~/.bashrc. Terminalim beyan ettiğim takma adları tanımadı ~/.bashrc. Makaleden (altta ekli) Mac OS X'in login-shellvarsayılan olarak çalıştığını ve ~/.bash_profilebunun yerine çağırdığını öğrendim ~/.bashrc.
Takma adlarınızı bildirirken aynı sorunla karşılaşırsanız, sorunu çözmek için aşağıdaki bağlantıya başvurabilirsiniz:
http://www.joshstaiger.org/archives/2005/07/bash_profile_vs.html
source .bashrcTakma adın oturumu kapatmadan tanınmasını sağlamak için her zaman dosyadaki değişiklikleri kaydettikten sonra gerçekleştiririm .