Menambahkan pintasan perintah ke / bin

8

Apakah ada cara untuk menambahkan perintah khusus /bin?

Sebagai contoh, saya menggunakan docker container lsbanyak, dan ingin mengubahnya menjadi perintah pintas, seperti dcls.

Jika saya menambahkan file bernama dclske /bindan di dalam file, tentukan perintah yang tepat docker container ls, saya menganggap ini tidak akan berhasil.

Apa cara yang benar, jika ada, untuk melakukan hal seperti ini?

alex067
sumber
6
Jangan menambahkan /bin, Anda dapat menambahkan ~/bin(bin di direktori Anda sendiri), atau ke /usr/local/bin(untuk berbagi dengan semua pengguna sistem Anda, tetapi tidak mengganggu manajer paket). Atau lebih baik dalam hal ini, untuk menggunakan alias.
ctrl-alt-delor

Jawaban:

24

Cara mudah untuk pintasan adalah dengan mendefinisikan sebuah alias

alias dcls='docker container ls'

Ini akan dijalankan docker container lsketika Anda masuk dclsdan perintah aliasmencantumkan alias yang Anda tetapkan. Untuk menghapus alias gunakan ini unalias dcls.

Jika Anda menggunakan bash, Anda dapat menyimpan alias di ~/.bashrcatau ~/.bash_aliases.

Jika Anda ~/.bash_aliasestidak membaca saat startup, Anda dapat menambahkan baris ini ke ~/.bashrc:

[ -f ~/.bash_aliases ] && . ~/.bash_aliases
Freddy
sumber
Freddy terima kasih! Apakah saya harus membuat alias ini setiap kali server restart? Atau apakah itu terikat ke profil pengguna saya?
alex067
2
Anda harus menyimpannya di file startup shell pengguna Anda ~/.bashrcatau ~/.profileatau ... Jika Anda tidak menyimpan alias hilang saat Anda keluar atau menutup terminal.
Freddy
Terima kasih lagi. Bagaimana jika kita tidak memiliki .bashrc atau .profile di folder ~ kita?
alex067
1
Betulkah? Server yang aneh! Jika Anda menggunakan bash, Anda dapat membuatnya menggunakan echo "alias dcls='docker container ls'" >> ~/.bashrc, lalu sumber dengan . ~/.bashrcatau keluar dan login lagi.
Freddy
Terima kasih atas bantuan Anda, buat itu bekerja!
alex067
15

Sebenarnya, apa yang Anda gambarkan akan berhasil, dengan beberapa catatan:

  1. Anda bisa memasukkannya docker container lske dalam file bernama /bin/dcls. Tetapi perilaku itu bisa sedikit rumit. Ini sedikit lebih dapat diandalkan untuk memulai file dengan garis yang disebut "shebang", sehingga file tersebut akan terlihat seperti
    #! / bin / sh
    kontainer buruh pelabuhan ls
    yang menentukan bahwa file tersebut adalah skrip shell.
  2. Sebelum Anda dapat menjalankan perintah, Anda harus membuat file dapat dieksekusi dengan perintah seperti
    chmod + x / bin / dcls
    Anda mungkin perlu menjadi root untuk melakukan ini (yaitu, jalankan dengan sudo).
  3. Ikuti dua langkah di atas dan Anda akan bisa mengetik dcls dan itu akan dilakukan docker container ls. Tetapi, jika Anda mengetik dcls -l foo, itu masih akan dilakukan docker container ls. Jika Anda ingin melakukannya docker container ls -l foo, Anda harus mengubah skrip untuk mengatakan

    #! / bin / sh
    kontainer buruh pelabuhan adalah "$ @"
    yang menentukan bahwa argumen apa pun yang Anda ketikkan pada dclsbaris perintah harus diteruskan ke docker container lsperintah.

    Secara alami, ada hal-hal yang lebih rumit yang dapat Anda lakukan dengan argumen baris perintah.

Untuk pemetaan satu perintah sederhana → satu perintah sederhana, yang tidak perlu dibagi dengan pengguna lain, lebih mudah untuk mendefinisikan alias ( seperti yang disarankan Freddy ), atau fungsi shell. Fungsi yang lebih rumit sering ditulis sebagai skrip; yaitu file teks yang berisi perintah. Tetapi, jika Anda tidak perlu membaginya dengan pengguna lain, itu lebih umum untuk menggunakan bindirektori pribadi .

$ cd                                     # (ke direktori home Anda) 
$ mkdir bin
Kemudian salin dclske $HOME/bin, dan tambahkan
export PATH = "$ HOME / bin: $ PATH"
untuk Anda ~/.bashrc.

Juga, sudah umum untuk memasukkan skrip pribadi ke dalam /usr/local/bin, dan pergi /binke program yang disertakan dengan sistem.

G-Man Mengatakan 'Reinstate Monica'
sumber
Jawaban yang bagus Jika saya menambahkannya ke bin seperti yang saya sebutkan, itu akan memengaruhi semua pengguna, benar?
alex067
Iya; semua pengguna melihat di /bin,  /usr/bin, dan biasanya bersama direktori seperti /usr/local/bin dan kadang-kadang /opt, sehingga program-program di direktori tersebut tersedia untuk semua pengguna.
G-Man Mengatakan 'Reinstate Monica'
1
Jika Anda ingin berbagi dengan orang lain di sistem Anda gunakan /usr/local/binsehingga tidak mengganggu manajer paket.
ctrl-alt-delor
5
+1 untuk merekomendasikan $HOME/bin. Anda harus benar-benar menggunakan ini. Ini bukan hanya ruang lingkup yang tepat, tetapi membantu ketika Anda menginstal ulang sistem Anda (dan menjaga Anda HOME) untuk tidak kehilangan perintah kustom Anda.
allo
1
FWIW saya gunakan ~/.local/bin sebagai gantinya .
Sparhawk
0

Jika hanya untuk Anda, alias baik-baik saja tetapi menurut Linux Filesystem Hierarchy Standard lokal-lebar skrip sistem masuk /usr/local/bin/, tidak /bin.

  1. Meskipun pasti akan berhasil /bin, lebih baik untuk menjaga standar terutama jika perangkat lunak Anda akan digunakan di situs pelanggan.
  2. Jika skrip Anda opsional, harus masuk /opt
  3. Script itu sendiri adalah:

    #!/bin/bash
    #
    # Version 1.0 DD 2019-05-04
    # dcls = docker container ls
    docker container ls "@0"
    if [[ $? -eq 0 ]]; then
      echo -e "Errors encountered..."
      exit 1
    fi
    
Fabby
sumber