Bagaimana cara membuat alias Bash permanen?

382

Saya ingin membuat alias untuk memberi rmperintah agar memiliki pesan konfirmasi setelah menjalankan perintah ini. Jadi saya membuat alias seperti ini alias rm='rm -i'. Tapi sejauh yang saya tahu ini adalah alias sementara dan itu hidup sampai Anda menutup terminal.

Seperti yang dijelaskan di sini untuk menyimpan alias secara permanen saya perlu mengeksekusi ~/.bash_aliasesatau ~/.bashrcperintah di terminal dan menambahkan alias saya di sana. Tetapi ketika saya mengeksekusi ~/.bashrcsaya menerima pesan kesalahan berikut:

bash: /home/bakhtiyor/.bashrc: Permission denied

Ketika saya menjalankan ~/.bash_aliasessaya mendapatkan pesan kesalahan lain seperti ini:

bash: /home/bakhtiyor/.bash_aliases: File or directory doesn't exist.

Apa masalah sebenarnya dan bagaimana saya bisa menyelesaikannya?

Bakhtiyor
sumber
2
JAWABAN - stackoverflow.com/a/2622711/1487102
neaumusic
alias rm='rm -i'tidak memecahkan masalah menggunakan rm sembarangan
qwr

Jawaban:

429

Untuk membuat alias, tambahkan alias secara permanen ke .bashrcfile Anda

gedit ~/.bashrc

Dan kemudian tambahkan alias Anda di bagian bawah.

teks alternatif

Sekarang jalankan . ~/.bashrcdi terminal Anda (harus ada ruang antara .dan ~/.bashrc.

Sekarang Anda dapat memeriksa alias Anda.

teks alternatif

karthick87
sumber
5
@ karthick87 Anda menulis "Sekarang jalankan. ~ / .bashrc di terminal Anda (harus ada celah antara. dan ~ / .bashrc.". Mengapa langkah ini diperlukan?
Geek
5
apa yang pertama '.' lakukan di ~ / .bashrc?
Zen
22
@Geek @Zen "Execute" bukan istilah yang benar. Titik sama dengan source. Dengan . ~/.bashrc, Anda sumber bash Anda. Mengeksekusi file akan memulai proses anak, jalankan perintah dalam proses ini, lalu kembali. Semua yang dilakukan dalam proses anak tidak berpengaruh pada proses induk (bash dari mana Anda dieksekusi). Sebaliknya, sumber (dengan titik) bertindak persis seperti jika Anda menulis konten file di terminal. Ini yang kamu inginkan. .bashrcbersumber setiap kali Anda memulai sebuah bash. Jika Anda membuat perubahan, itu tidak akan berlaku sampai Anda memulai bash atau sumber baru secara manual.
Gauthier
@ButtleButkus - mungkin ingin mengubah hanya satu preferensi pengguna daripada keseluruhan sistem. Di Ubuntu, file .bashrc di seluruh sistem adalah
/etc/bash.bashrc
1
@ ShubhamA. lihat pertanyaan ini untuk perilaku OSX
jandersen
253

Ada banyak cara untuk membuat alias. Cara yang paling sering digunakan adalah:

  1. Tambahkan alias langsung ke ~/.bashrcfile Anda

    Misalnya: tambahkan baris ini ke ~/.bashrcfile

    alias ll='ls -l'
    alias rm='rm -i'

    Waktu berikutnya (setelah Anda log out / in, atau dilakukan . ~/.bashrc) ketika Anda mengetik rmyang rm -iperintah akan dieksekusi.

  2. Metode kedua memungkinkan Anda membuat file alias terpisah, jadi Anda tidak perlu memasukkannya .bashrc, tetapi ke file pilihan Anda. Pertama, edit ~/.bashrcfile Anda dan tambahkan baris berikut jika belum ada, atau batalkan komentar jika sudah:

    if [ -f ~/.bash_aliases ]; then
    . ~/.bash_aliases
    fi

    Simpan dan tutup file. Setelah itu, yang harus Anda lakukan adalah membuat ~/.bash_aliasesfile dan menambahkan alias di sana, dengan format yang sama yang ditentukan dalam metode pertama.

    Isi ~/.bash_aliasesfile saya :

    alias cs='cd;ls'
aneeshep
sumber
72
+1 untuk digunakan ~/.bash_aliases.
ændrük
Yap, menggunakan file lain alias jauh lebih bersih, juga portable antar distro. Saya menggunakan file itu karena beberapa alias tidak cukup dan fungsi diperlukan. Jadi lebih bersih jika Anda menggunakan file untuk tugas itu. Saya memiliki alias lain -> alias aliases="xdg-open ~/.bash_aliases && source ~/.bash_aliases", sehingga alias menjadi berguna untuk disimpan, dan jika Anda melakukan kesalahan itu akan mengiklankan Anda.
erm3nda
entah bagaimana setelah saya menambahkan alias seperti itu alias ls='ls -althr', beberapa flag yang diberikan tidak akan berpengaruh, dalam hal ini flag -t tidak berlaku. apa kamu tahu kenapa?
Sajuuk
3
Secara default ~/.bashrcberisi penyertaan untuk ~/.bash_aliases, tidak perlu mengeditnya.
Jaakko
1
Tidak selalu ~ / .bashrc mengandung inklusi untuk ~ / .bash_aliases seperti pada kasus saya dengan terminal Ubuntu Windows 10 solusi ini menjadi sangat berguna.
Jose
19

Bagi saya sepertinya satu-satunya masalah Anda hanyalah mencoba mengeksekusi .bashrc ketika itu tidak dapat dieksekusi. Tetapi ini bukan cara yang benar untuk melakukannya; setiap kali Anda membuat perubahan pada file ini, Anda harus "mengeksekusi" dengan perintah:

source ~/.bashrc

Jika tidak, itu hanya akan membuat shell baru, jalankan file di lingkungan shell baru, lalu buang lingkungan itu ketika keluar, sehingga kehilangan perubahan Anda. Dengan sumber skrip, ia mengeksekusi di dalam shell saat ini, sehingga akan tetap berlaku.

Saya berasumsi kesalahan kedua adalah karena bash_aliases tidak ada. Tidak diperlukan, hanya disarankan untuk menjaga perubahan Anda terpisah dan terorganisir. Ini hanya digunakan jika ada, dan Anda dapat melihat tes untuk itu di .bashrc:

if [ -f ~/.bash_aliases ]; then
. ~/.bash_aliases
fi

Ini mengatakan bahwa jika file ~ / .bash_aliases ada, maka jalankan.

Marty Fried
sumber
~/.bash_aliaseslebih baik. askubuntu.com/questions/194111/…
tomByrer
1
menggunakan sourceperintah membuat alias saya berfungsi. +1
dspacejs
4
Hanya untuk kelengkapan: Titik awal pada baris . ~/.bash_aliasesmemiliki arti yang sama dengan perintah bawaan shell source. Saya menemukan ini sebagai jawaban yang benar, menjelaskan apa yang terjadi.
Melebius
17

Masalahnya adalah Anda mencoba mengeksekusi file yang tidak dapat dieksekusi: Anda dapat memeriksanya dengan:

ls -la ~/.bashrc
-rw-r--r-- 1 username username 3596 2010-08-05 17:17 /home/pt001424/.bashrc

Perhatikan tidak ada huruf "x - executable" pada kolom pertama (izin file).

File profil bukan file yang dapat dieksekusi, alih-alih mengeksekusi mereka Anda memuatnya dengan:

source /home/bakhtiyor/.bashrc

atau

. /home/bakhtiyor/.bashrc
João Pinto
sumber
7
echo "alias vps='ssh -X [email protected]'" >> ~/.bashrc

Ini adalah contoh yang saya cari, cara mengetik beberapa huruf di terminal ("vps") untuk login dari jauh ke server dan mengaktifkan penerusan X11 sehingga saya bisa menjalankan aplikasi gui seperti "gedit" melalui jaringan.

Apapun perintah / perintah alias, cara ini dengan pernyataan gema, tanda kutip, dan simbol untuk menambahkan output dari perintah ke file (>>) bekerja untuk saya. Cukup ganti perintah saya untuk perintah alias yang Anda butuhkan dan masukkan ke terminal Anda.

pengguna80638
sumber
Kutipan di sini sedikit rumit. Dalam contoh ini, menggunakan tanda kutip ganda tidak bermasalah, tetapi jika teks dalam tanda kutip berisi tanda-tanda dolar, garis miring terbalik, dll, Anda perlu memahami bagaimana shell memprosesnya dalam tanda kutip ganda. Anda dapat beralih ke tanda kutip tunggal di luar dan tanda kutip ganda di bagian dalam, tetapi Anda masih perlu memahami bagaimana Bash memproses tanda kutip ganda dalam definisi alias.
tripleee
5

jika Anda menggunakan ruby, Anda dapat menginstal alias menggunakan rubygem.

gem install aka2

pemakaian

aka generate hello="echo helloworld" #add an alias
aka g hello="echo helloworld"  #add alias for lazy people

aka destroy hello #remove alias
aka d hello #remove alias for lazy people

rubygem akan sumber-otomatis file dot Anda sehingga Anda tidak perlu. Saksikan berikut ini.

ytbryan
sumber
4

Saya menulis fungsi yang bermanfaat ini untuk dengan cepat membuat alias baru, dan kemudian menulis definisi alias ke ~/.bash_aliases (jika ada) atau ~/.bashrc.

TIP : Pastikan ~/.bash_aliasesada & dijalankan di ~/.bashrc.

# -----------------------------------
#  Create a new permanent bash alias
#
#  @param $1 - name
#  @param $2 - definition
# -----------------------------------
new-alias () { 
  if [ -z "$1" ]; then
    echo "alias name:" && read NAME
  else
    NAME=$1
  fi

  if alias $NAME 2 > /dev/null > /dev/null; then
    echo "alias $NAME already exists - continue [y/n]?" && read YN
    case $YN in
      [Yy]* ) echo "okay, let's proceed.";;
      [Nn]* ) return;;
      * ) echo "invalid response." && return;;
    esac
  fi

  if [ -z "$2" ]; then
    echo "alias definition:" && read DEFINTION
  else
    DEFINTION="$2"
  fi

  if [ -f ~/.bash_aliases ]; then
    echo "alias $NAME=\"$DEFINTION\"" >> ~/.bash_aliases
  else
    echo "alias $NAME=\"$DEFINTION\"" >> ~/.bashrc
  fi

  alias $NAME="$DEFINTION"
}
blizzrdof77
sumber
1
Gagasan bagus, tetapi penggunaan fungsi ini secara sembrono dapat menyebabkan sampah .bashrcdengan banyak contoh aliasperintah. Fungsi Anda pasti perlu menerapkan beberapa pemeriksaan untuk menghindari kekacauan seperti itu.
Troublemaker-DV
Ini adalah poin yang valid. Apakah Anda memiliki solusi yang disarankan yang ingin Anda bagikan @ Troublemaker-DV?
blizzrdof77
Tidak yakin apakah masih aktual 2 1 / 2yo nanti, tapi ... Pada tanggal 1 saya akan memeriksa RC untuk memeriksa perintah alias, jika alias ini sudah dimasukkan di sana untuk menghindari duplikat. Pemeriksaan Anda untuk keberadaan alias tidak cukup, karena RC mungkin sudah "terkontaminasi" dengan banyak alias dengan nama yang sama.
Troublemaker-DV
0

Saya sarankan menggunakan /etc/bash.bashrc

Anda dapat menambahkan baris di akhir file itu.

alias ok="ping google.com"

Setelah meletakkan alias per baris, Anda harus reboot atau login kembali.

Fahad Ahammed
sumber
7
"Aku akan menyarankan .." dan mengapa kamu menyarankan itu?
muru
2
Anda tidak boleh main-main dengan file sistem kecuali Anda secara khusus ingin menginstal pengaturan sistem untuk semua pengguna. Pada sistem pribadi, perbedaannya kecil, tetapi kemudian mengacaukan file sistem lebih rumit, jadi Anda mungkin masih lebih suka file dot pribadi Anda untuk preferensi pribadi (dan itu membuatnya lebih mudah untuk menyalin pengaturan di tempat lain di masa depan juga).
tripleee
1
Mulai ulang? Itu saran yang sangat mengerikan, JANGAN lakukan itu, terutama ketika source /etc/bash.bashrcmelakukan semua yang Anda inginkan dalam contoh ini. Tetapi harus menggunakan ~/.bashrcatau ~/.bash_aliasessebagai gantinya
Xen2050
@ Xen2050, saya menyarankan reboot untuk menunjukkan itu berfungsi setelah reboot / relogin. Omong-omong, bahkan jendela terminal bersih lainnya juga akan berfungsi.
Fahad Ahammed
1
Anda dapat meningkatkan ke kernel baru tanpa me-reboot, ini bukan windows lama ;-)
Xen2050
0

Seingat saya, bashrcmemiliki, atau pernah, baris yang menyarankan untuk tidak menggunakannya untuk alias secara langsung. The solusi adalah dengan menggunakan file eksternal (s). The foodan baralias telah ditambahkan, tetapi untuk menambahkan bazini bashrcfile yang harus "bersumber" (atau, hanya membuka terminal baru). Contoh sebagai:

thufir@dur:~$ 
thufir@dur:~$ alias
alias alert='notify-send --urgency=low -i "$([ $? = 0 ] && echo terminal || echo error)" "$(history|tail -n1|sed -e '\''s/^\s*[0-9]\+\s*//;s/[;&|]\s*alert$//'\'')"'
alias bar='echo foo'
alias egrep='egrep --color=auto'
alias fgrep='fgrep --color=auto'
alias foo='echo foo'
alias grep='grep --color=auto'
alias l='ls -CF'
alias la='ls -A'
alias ll='ls -alF'
alias ls='ls --color=auto'
thufir@dur:~$ 
thufir@dur:~$ cat .bash_aliases 
alias foo='echo foo'
alias bar='echo foo'
alias baz='echo baz'

thufir@dur:~$ 
thufir@dur:~$ source .bashrc 
thufir@dur:~$ 
thufir@dur:~$ alias
alias alert='notify-send --urgency=low -i "$([ $? = 0 ] && echo terminal || echo error)" "$(history|tail -n1|sed -e '\''s/^\s*[0-9]\+\s*//;s/[;&|]\s*alert$//'\'')"'
alias bar='echo foo'
alias baz='echo baz'
alias egrep='egrep --color=auto'
alias fgrep='fgrep --color=auto'
alias foo='echo foo'
alias grep='grep --color=auto'
alias l='ls -CF'
alias la='ls -A'
alias ll='ls -alF'
alias ls='ls --color=auto'
thufir@dur:~$ 
thufir@dur:~$ baz
baz
thufir@dur:~$ 

sekarang bazalias berfungsi. Saya baru saja menyadari bahwa jawaban sebelumnya telah menyebutkan teknik ini, tetapi mereka telah mengubur lede.

Thufir
sumber