ditemukan apakah biner menggunakan whereis tetapi tidak dapat menemukan mengapa?

6

ditemukan apakah biner menggunakan whereis tetapi tidak dapat menemukan mengapa? Bagaimana menemukan di mana biner akan dilepas?

Saya menemukan "ls" biner menggunakan "whereis" tetapi tidak dapat menemukan "ll"

$ whereis ls
ls: /bin/ls /usr/share/man/man1/ls.1.gz

Tetapi tidak dapat menemukan ll:

$ whereis ll
ll:
Ashish Karpe
sumber
4
cobatype -a ls ll
glenn jackman
Saya pikir, apa yang Anda @Ashish temukan adalah halaman manual dan bukan "biner" dari ls.
manishraj2011

Jawaban:

14

llbukan biner melainkan alias dari ls -alFperintah.

Periksa .bashrcfile:

$ alias ll
alias ll='ls -alF'
hg8
sumber
7
Dan, jika saya bisa menambahkan sesuatu, gunakan type, yang merupakan bawaan di sebagian besar shell, atau which( /usr/bin/which) sebagai ganti whereis. Berbeda dari whereis, mereka akan mendeteksi alias dll.
kos
3
@kos type, ya, tapi whichtidak akan mendeteksi alias. Seperti yang Anda perhatikan, ini adalah executable /usr/bin/which, yang tidak memiliki akses ke alias shell Anda.
wchargin
1
@WChargin Maaf, saya mencampuradukkan hal itu dengan buruk. Saya menggunakan zshin zsh whichadalah built-in (dan mendeteksi alias). /usr/bin/whichtidak akan mendeteksi alias; whichdi zsh(dan saya kira di shell lain yang memilikinya sebagai built-in juga) akan mendeteksi alias.
kos
2
@kos mengerti — senang tahu!
wchargin
1
Pada beberapa sistem, / usr / bin / yang dapat menampilkan alias dari bash ketika dipanggil sebagai alias | which -i, yang dengan sendirinya sering membuat alias, seperti pada alias which="alias | which -i". Sayangnya, versi di Ubuntu tampaknya tidak memiliki fitur ini, jadi ketika menggunakan yang dapat diterapkan secara umum, itu tidak ada di sini :-(
John O'M.
7

Seperti dicatat oleh kos di komentar, Anda harus menggunakan pesta built-in typeperintah yang, tidak seperti whereis, juga menyadari alias dan shell built-in:

$ type ll ls cd
ll is aliased to `ls -alF'
ls is hashed (/bin/ls)
cd is a shell builtin

(Untuk arti "hash", lihat pertanyaan ini di unix.SE. )

Ilmari Karonen
sumber
1
Juga akan bekerja untuk fungsi bash: testfunc() { echo 'Hi!'; }; type testfunc.
Ruslan 6-15
6

Banyak pengguna menyukai jalan pintas dan inilah alias, opsi pintasan untuk pengguna.

Skrip tidak boleh menggunakan pintasan, yang bukan desain portabel, seperti yang Anda ketahui, perintah alias ini tidak didefinisikan secara konsisten.

Jawaban termudah untuk memenuhi kebutuhan Anda, dengan asumsi penggunaan 'll' diulangi:

Di dalam skrip, tentukan alias ll = 'ls-l', sebelum merujuk perintah, maka penggunaan 'll' akan berfungsi di seluruh skrip ini.

#!/bin/bash
alias  ll='ls -alF'
... (rest of the script)

Jawaban yang lebih baik: lebih baik menggunakan perintah lengkap dalam skrip, memberikan dokumentasi. Jangan pernah menggunakan alias dalam skrip yang harus digunakan orang lain.

webmaster LinuxCourses
sumber
Antarmuka ini memodifikasi baris skrip, harus dimulai dengan karakter 'hash' diikuti oleh 'seru' lalu / bin / bash seperti pada '#! / Bin / bash' dengan asumsi ini adalah skrip bash. Ini adalah baris pertama yang direkomendasikan dari skrip bash apa pun. Ini memberitahu sistem shell mana yang akan digunakan untuk menafsirkan skrip ini.
webmaster LinuxCourses
1
Anda hanya perlu menggunakan pemformatan kode. Pilih cuplikan dan tekan CTRL + K atau klik {}tombol. Atau indentasi secara manual setiap baris kode dengan 4 spasi. Itu sintaks Markdown yang digunakan di sini di StackExchange. Lihat askubuntu.com/help/formatting untuk mempelajari lebih lanjut.
Byte Commander
Muchos gracias, saya tidak mengetahui opsi pemformatan ini. Saya melihat bahwa Anda telah mengubah jawaban saya, sangat saya hargai.
webmaster LinuxCourses