25 Ağustos 2020 Salı

alias tanımlama - ~/.bash_aliases Dosyası Kullanılabilir

Giriş
alias built-in komutu ile alias tanımlama farklı şeyler.

Alias Hataları
- Alias isminde boşluk olmamalıdır
Örnek
Şu alias hata verir. Çünkü alias isminde boşluk var
$ alias 'apt update'='sudo apt update -y'
bash: alias: 'apt update': invalid alias name
Şöyle yaparız
alias apt-update='sudo apt update -y'
Alias Tanımlandığı Aynı Satırda Kullanılamaz
Örnek
Şu alias tanımlaması çalışmaz
$ alias x=ls; x
x: command not found
Şöyle yaparız
You can work around it by forcing a re-parsing using eval:

$ alias x=date; eval x
Fri Nov 12 18:20:54 JST 2021

- Alias Tanımlamada Sonsuz Döngü Varsa
Bash buna izin vermiyor. Açıklaması şöyle.
Bash does allow aliases to contain aliases but it has built-in protections against infinite loops.
Eğer bash alias'larda döngü bulursa "command not found" şeklinde hata verir.
Örnek
Elimizde şöyle bir alias dizisi olsun
alias ls="lsc"
alias lsc='ls -Flatr --color=always'
alias lscR='ls -FlatrR --color=always'
Komut satırına lsc yazarsak elimizde şu geçer.
ls -Flatr --color=always
ls bir alias olduğu için elimizde şu geçer.
lsc -Flatr --color=always
lsc de bir alias olduğu için ve daha önce açıldığı için bash hata verir. Çıktı olarak şunu alırız
$ lsc
lsc: command not found
Alias İçinde Tek Tırnak Varsa
alias'ı çift tırnak içine alırız. Bu sadece basit çözümlerden birisi
Örnek
Şöyle yaparız
$ alias ios="iostat -xk 2 $(findmnt -T ~ | awk 'END {print $2}')"
Alias Hangi Dosyalarda Tanımlanır
~/.bashrc veya ~/.bash_aliases dosyasına tanımlanır.

1. ~/.profile Dosyası - Kullanmayın
Bu dosya alias tanımlamak için uygun değil. Açıklaması şöyle. Bu dosya login shell içindir.
The commands in ~/.profile are run by login shells. That file is a good place to do things that should be done once at the beginning of each session but not repeated every time a new shell is started. ~/.profile is good for setting environment variables, which will be inherited by all descendant processes.
Ancak bash kabukları login shell değildir. Açıklaması şöyle.
Aliases are not inherited, and the shell you get in a terminal window in Ubuntu is not (by default) a login shell. To define aliases for all your interactive Bash shells, the definitions need to be somewhere where they'll be run each time you start such a shell.
2. ~/.bashrc Dosyası
~/.bashrc Dosyası yazısına taşıdım

3. ~/.bash_aliases Dosyası
Bu dosya ~/.bashrc dosyası tarafından okunur. Açıklaması şöyle.
The default ~/.bashrc in Ubuntu checks if ~/.bash_aliases exists and sources it.
Alias ve expansion
alias expansion'a tabi tutulduğu için eğer alias yapılan komut parametreyi en sona almıyorsa sorun çıkıyor. Bu durumda alias yerine function tanımlamak daha iyi.

Örnek
Alias yerine function için şöyle yaparız. Önce ~/.bashrc dosyasında şöyle bir metod tanımlayalım. $@ tüm parametreler anlamına gelir. bash kodlama - gömülü değişkenler yazısına bakabilirsiniz.
myrm() {
 /bin/mv "$@" /home/user/Trash/
}
Çağırmak için şöyle yaparız.
myrm foo 
Bu şöyle yorumlanır.
mv foo /home/user/Trash
sudo ve Alias
alias ile tanımladığımız kısa komutu sudo komutuna geçmek istersek sudo için de alias yapmak gerekir. Açıklaması şöyle
If the last character of the alias value is a blank, then the next command word following the alias is also checked for alias expansion.
En sonda bir boşluk bırakarak şöyle yaparız
alias sudo="sudo "
Daha sonra bir alias tanımlarız.
alias myalias="..."
sudo ile çalıştırmak için şöyle yaparız.
sudo myalias param1:param2
Alias ve dosyalar
Örnek
Elimizde şöyle bir kod olsun.
alias thead='head | cut -d, -f1- | column -s, -t'
Bunu çağıralım
thead file.csv
Aslında şu çıktıyı elde ederiz ve hata alırız.
head | cut -d, -f1- | column -s, -t file.csv
Dosyayı < işaret ile geçmek gerekir. Şöyle yaparız.
thead <file.csv
Kullanım Örnekleri

Örnek
bash'te alias tanımlarken aliasismi='...' şeklide tanımlarız. Diğer bazı kabuklarda alias isminden sonra = karakteri gerekmeyebilir.

Örnek
Şöyle yaparız. Komut tek tırnak içine alınır.
alias myalias='...'
Örnek
Şöyle yaparız. Komut tek tırnak içine alınır.
alias open='/usr/lib/node_modules/occam-open-cli/open.js'
Örnek
Çok satırlı alias tanımla için şöyle yaparız
#!/bin/bash

alias jo='
echo "please enter values "
read a 
read -e b 
echo "My values are $a and $b"'
Çıktı olarak şunu alırız.
$ jo
please enter values 
foo bar
baz
My values are foo bar and baz



Hiç yorum yok:

Yorum Gönder