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 master
ve 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. ll
sadece 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 ~/.bashrc
ve terminalinizi yeniden başlatın veya çalıştırınsource ~/.bashrc
function lock() {
gnome-screensaver
gnome-screensaver-command --lock
}
Bu şekilde, bu iki komut lock
terminalinize her girdiğinizde çalışacaktır .
Özel durumunuzda bir alias
iş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-shell
varsayılan olarak çalıştığını ve ~/.bash_profile
bunun 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 .bashrc
Takma adın oturumu kapatmadan tanınmasını sağlamak için her zaman dosyadaki değişiklikleri kaydettikten sonra gerçekleştiririm .