Bagaimana saya bisa mengatur alias untuk semua pengguna?

38

Saya memiliki Ubuntu 14.04.2. Saya ingin membuatnya sehingga semua pengguna secara otomatis memiliki set alias khusus. Saya memiliki alias saya disetel di .bashrc pribadi saya, tetapi saya tidak ingin harus menyalinnya secara manual ke pengguna lain. Idealnya itu harus secara otomatis mengatur ini untuk pengguna yang baru dibuat juga.

Brian Sizemore
sumber
1
Dengan "preset," maksud Anda, Anda ingin semua pengguna baru dibuat dengan alias tertentu, yang kemudian dapat mereka atur ulang dengan mudah? Atau maksud Anda ingin membuat alias global, sehingga semua pengguna akan memilikinya setiap saat (dan dapat mendefinisikan ulang / membatalkannya ... tetapi tidak melihatnya saat mereka melihat melalui file konfigurasi mereka sendiri, yang mungkin mereka temukan membingungkan)? Atau sesuatu yang lain? Terkait: Membatalkan .bashrc dan .bash_profile (terlepas dari judulnya yang aneh, saya percaya pertanyaan itu dan yang ini sebenarnya sangat mirip).
Eliah Kagan

Jawaban:

50

Anda dapat membuat skrip /etc/profile.d/untuk membuat alias untuk semua pengguna:

  1. Buat file bernama 00-aliases.sh(atau nama mewah lainnya) di /etc/profile.d:

    gksu gedit /etc/profile.d/00-aliases.sh
    
  2. Beri Anda alias dalam file ini. Contoh:

    alias foo='bar --baz'
    alias baz='foo --bar'
    
  3. Simpan file

  4. Nyalakan kembali terminal terbuka untuk menerapkan perubahan.
  5. Nikmati!

Beberapa catatan:

  • /etc/profileadalah file global yang dijalankan sebelumnya ~/.profile.
  • /etc/profile.d/ adalah folder yang berisi skrip yang dipanggil oleh /etc/profile
  • Ketika /etc/profiledisebut (ketika Anda mulai / masuk shell), akan mencari semua file yang berakhiran .shdi /etc/profile.d/dan berjalan mereka dengan salah satu dari perintah ini:

    source /etc/profile.d/myfile.sh
    

    . /etc/profile.d/myfile.sh
    
  • Saya meletakkan 00-sebelum nama file untuk membuatnya mengeksekusi sebelum sisa skrip.
  • Anda juga dapat menambahkan alias /etc/profile, tetapi ini tidak disarankan.
Helio
sumber
2
Bekerja dengan sempurna! Bisakah Anda memberi saya penjelasan singkat tentang apa tujuan /etc/profile.d?
Brian Sizemore
1
@BrianSizemore: Saya memperbarui jawaban saya dengan beberapa penjelasan. Apakah Anda memiliki pertanyaan lain?
Helio
1
Ini menjelaskan dengan sangat baik. Klarifikasi membantu saya untuk mengembangkan kegunaan lain juga. Terima kasih atas semua bantuannya!
Brian Sizemore
4
Metode dalam jawaban ini tidak boleh digunakan. Alias ​​dalam .shfile di /etc/profile.d/(atau /etc/profile) akan didefinisikan hanya untuk shell login dan mereka tidak akan bekerja di shell non-login interaktif. Tidak seperti variabel lingkungan, bash tidak dapat mengekspor alias ke proses anak, bahkan cangkang bash anak. Metode ini mungkin tampak berfungsi dengan baik jika hanya diuji di shell login, seperti shell asli yang diperoleh dengan masuk di konsol virtual atau melalui SSH, tetapi gagal di shell anak mereka dan juga gagal di shell yang dimulai oleh jendela terminal GUI.
Eliah Kagan
2
@ Halo Jawaban saya untuk Undertanding .bashrc dan .bash_profile memberikan dua metode lain, tergantung pada apa tujuannya, bersama dengan penjelasan terperinci. Saya tidak yakin apakah pertanyaan ini atau itu dapat dianggap duplikat. Saya telah mengomentari pertanyaan ini untuk mendapatkan klarifikasi dari OP tentang kebutuhan mereka. Pertanyaan ini lebih sempit cakupannya dari yang satu jadi saya kira tidak apa-apa bagi saya untuk mengirim jawaban singkat di sini yang mencakup beberapa materi dalam yang panjang di sana. (Untuk saat ini, saya berharap mendapat balasan dari OP atas komentar saya.)
Eliah Kagan
6

Seperti yang ditunjukkan di sini , mungkin lebih baik untuk menambahkan alias global di /etc/bash.bashrc:

alias foo='bar --baz'
alias baz='foo --bar'

, karena skrip di /etc/profile.ddapat diabaikan untuk beberapa shell (non-login) tertentu. Butuh waktu berjam-jam untuk mencari tahu mengapa /etc/profile.dtidak berhasil.

Lihat misalnya https://askubuntu.com/a/606882/ dan Memahami .bashrc dan .bash_profile untuk perbedaan antara shell.

tinlyx
sumber
5

Alias ​​hanya akan berfungsi saat berada di dalam shell. Jika Anda ingin sesuatu yang dapat diakses secara luas sebagai yang dapat dieksekusi, Anda dapat menambahkan skrip pintas kecil ke /usr/bin, misalnya:

#!/bin/sh
ls -l "$@"

The "$@"melewati semua argumen hingga eksekusi. Nama skrip akan menjadi nama yang dapat dieksekusi.

Sumber: https://unix.stackexchange.com/a/52509/15954

jtpereyda
sumber
Jawaban ini sepertinya tidak berhubungan. Jawaban yang diterima dengan benar menjawab pertanyaan sementara ini sepertinya memberikan solusi.
Brian Sizemore
3
@BrianSizemore Saya punya pertanyaan yang sama tetapi menemukan solusi ini yang lebih sesuai untuk kasus saya; semoga ini akan membantu orang lain dalam situasi yang sama. Bagi banyak orang, alias akan baik-baik saja.
jtpereyda
1
@BrianSizemore Jawaban ini mengklarifikasi kesalahpahaman umum (yang juga saya miliki) dan bermanfaat serta terkait langsung.
20
0

/ etc / bashrc

  • Fungsi dan alias sistem yang luas
  • Hal-hal lingkungan ada di / etc / profile

Ini BUKAN ide yang baik untuk mengubah file ini kecuali Anda tahu apa yang Anda lakukan. Jauh lebih baik untuk membuat skrip shell custom.sh di /etc/profile.d/ untuk membuat perubahan khusus pada lingkungan Anda, karena ini akan mencegah perlunya penggabungan dalam pembaruan di masa mendatang.

CentoS
sumber