Apa yang bisa saya ketik di shell saya (yang kebetulan bash
) yang akan mendaftar semua perintah yang dikenali?
Juga, apakah ini berbeda dengan shell? Atau apakah semua shell hanya memiliki "direktori" perintah yang mereka kenali?
Kedua, pertanyaan yang berbeda, tetapi bagaimana saya bisa mengesampingkan semua itu? Dengan kata lain bagaimana saya bisa menulis view
perintah saya sendiri untuk menggantikan yang ada di sistem Ubuntu saya, yang tampaknya hanya memuat vim
.
Jawaban:
Anda dapat gunakan
compgen
FYI:
sumber
compgen -c
akan mencakup hal-hal seperti{
atauwhile
yang bukan perintah yang sepenuhnya berbicara.Shell tahu empat jenis perintah.
~/.bashrc
untuk bash).cd
mengubah direktori saat ini,set
mengubah opsi dan parameter posisi,export
mengubah lingkungan, ...). Sebagian besar shell menawarkan builtin yang sama, tetapi setiap shell memiliki beberapa ekstensi untuk set dasar.PATH
variabel lingkungan berisi daftar dipisahkan oleh titik dua direktori untuk mencari program.Jika ada perintah dari beberapa jenis dengan nama yang sama, pertandingan pertama dalam urutan di atas dijalankan¹.
Anda dapat melihat jenis perintah yang sesuai dengan nama dengan menjalankan
type some_name
.Anda dapat mendaftar alias dengan menjalankan
alias
bawaan tanpa argumen. Tidak ada cara untuk membuat daftar fungsi atau bawaan yang bekerja di semua shell. Anda dapat menemukan daftar bawaan dalam dokumentasi shell.Dalam bash,
set
builtin mendaftar fungsi dengan definisi dan variabelnya. Dalam bash, ksh atau zsh,typeset -f
daftar fungsi dengan definisinya. Di bash, Anda dapat mendaftar semua nama perintah dengan jenis apa puncompgen -c
. Anda dapat menggunakancompgen -A alias
,compgen -A builtin
compgen -A function
untuk mendaftar perintah dari jenis tertentu. Anda bisa meneruskan string tambahancompgen
ke daftar hanya perintah yang dimulai dengan awalan itu.Dalam zsh, Anda bisa daftar perintah yang tersedia saat ini dari jenis tertentu dengan
echo ${(k)aliases}
,echo ${(k)functions}
,echo ${(k)builtins}
danecho ${(k)commands}
(bahwa salah satu daftar terakhir perintah eksternal saja).Cuplikan agnostik shell berikut mencantumkan semua program eksternal yang tersedia:
Ada kasus tepi di Bash: perintah hash.
Manual Referensi Bash mengatakan:
Mencoba:
The
PATH
variabel lingkungan tidak mengandung~/dir-for-wat-command
,compgen -c
tidak menunjukkanwat
, tapi Anda dapat menjalankanwat
.Jika Anda ingin membayangi perintah yang ada, tentukan alias atau fungsi .
¹ Pengecualian: beberapa bawaan (disebut bawaan khusus ) tidak dapat dibayangi oleh suatu fungsi - bash dan zsh tidak mematuhi POSIX pada titik itu dalam mode standarnya.
sumber
$PATH
like/bin:/usr/bin:
(trailing:
), di mana ia akan gagal untuk membuat daftar file yang dapat dieksekusi di direktori saat ini.Daftar perintah terdiri dari dua set:
PATH
Anda tidak dapat mengubah built-in, tetapi Anda dapat menjaga shell dari menggunakan built-in dengan menentukan seperti pathname penuh
/bin/echo
.Adapun perintah di Anda
PATH
, Anda bisa mengubahnya.PATH
adalah daftar direktori yang dipisahkan oleh titik dua untuk mencari perintah. File yang cocok pertama kali ditemukan "menang".(Sintaks ini tidak bekerja untuk
csh
shell yang diarsipkan, tetapi semua yang saya tahu).Itu ekspor
PATH
dengan~/bin
sebagai entri pertama diikuti oleh sisaPATH
entri yang ada . Jadi sekarang shell Anda akan memeriksadirectory called
binin your home directory for a command *first* before checking the standard
PATH` sistem yang diatur. Anda dapat dengan mudah membuatnya memeriksa direktori baru yang terakhir dengan menggunakan:Untuk membuat
PATH
tetap ada login berikutnya, tambahkan ke.profile
file rc shell atau lainnya.sumber
Coba ini, menggunakan bash :
sumber
Jika Anda menekan tombol tab dua kali dan kemudian y, Anda akan mendapatkan daftar semua perintah yang tersedia di shell Anda saat ini. Untuk pertanyaan kedua saya pikir Anda harus menggunakan alias: shell alias .
sumber