Saya mencoba menggunakan ls
perintah dan mendapat kesalahan:
bash: /bin/ls: cannot execute binary file
Apa yang bisa saya gunakan daripada perintah ini?
linux
command-line
ls
jimmij
sumber
sumber
libc*so
atau Andald-linux*so
sash
tersedia di Ubuntu Linux , sebagai shells / sash di pohon port FreeBSD, sebagai paket Gentoo , serta tempat-tempat lain termasuk langsung dari penulisnya .Jawaban:
Anda dapat menggunakan perintah
echo
ataufind
bukannyals
:atau:
sumber
echo -- *
-n
di direktori saat ini, itu akan ditafsirkan sebagai flag, bukan sesuatu untuk diulang.touch ./-n
rm -rf /tmp/foo && mkdir /tmp/foo && cd /tmp/foo && touch ./-n oops && set -x && ls && echo *
echo
tampaknya tidak menghormati--
, per se . Jadi bagaimana yangecho -- *
lebih baik dariecho "" *
atau, lebih baikecho "The file(s) are:" *
,?Anda juga dapat menggunakan
printf
perintah, alih-alih gema:printf
lebih unggulecho
dalam situasi ini bahwaecho
tidak tidak menghormati "dash ganda" (--
) untuk menandakan akhir dari daftar argumen (pada beberapa sistem, termasuk Ubuntu 14.04 yang merupakan apa yang saya diuji pada):Dalam hal ini, Anda tidak dapat mencapai hasil yang diinginkan
echo
(karena file yang dipanggil-n
ditafsirkan sebagai opsi, dan dasbor ganda tidak berfungsi, jadi Anda harus menggunakanprintf
).Perhatikan bahwa Anda harus selalu menggunakan string format seperti di atas ketika berhadapan dengan data yang tidak dikenal
printf
, karena jika tidak, Anda dapat menerima hasil yang tidak terduga (terima kasih kepada @ G-Man karena menunjukkan ini di komentar!):File yang dipanggil
\n
ditafsirkan sebagai baris baru olehprintf
. Untuk menghindari ini, kami menggunakan string pemformatan untukprintf
(%s
) dan memberikannya nama-nama file (diperluas melalui globbing, seperti sebelumnya).printf
Solusi string pemformatan + ini dapat menangani berbagai nama file (dan juga memperlakukan file "tersembunyi", yaitu, yang dimulai dengan a.
, sama denganls
):Jika
printf
dukungan%q
Anda, Anda juga dapat menggunakannya (printf '%q\n' *
). Ini akan keluar dari spasi, baris baru, dll. Jika ada karakter aneh di nama file Anda. (Terima kasih kepada @muru dalam obrolan karena menunjukkan ini !)sumber
'%s'
(dengan\n
dan / atau teks konstan lainnya yang Anda inginkan). Misalnya, coba perintahnyatouch '%.0s' foo bar; ls; printf -- *
. Sebaliknya, saya tidak melihat mengapa Anda perlu--
ketika Anda memiliki'%s\n'
string format.--
dengan format string, dan saya telah mengedit posting saya untuk mengatasi hal lainnya.-n
file secara jujur seharusnya tidak menjadi masalah sama sekali untuk POSIX-2001 +echo
- pada sistem SUSv3echo
utilitas diperlukan untuk tidak menerima opsi apa pun.bash
'secho
dan beberapa orang lain melakukan menangani pilihan sekalipun, tetapibash
dapat dikompilasi dengan opsi membangun--enable-xpg-echo-default
untuk membuatnya berperilaku dengan benar sepanjang waktu. Perilaku yang benar untukecho
, bagaimanapun, berarti selalu menafsirkan serangan balasan lolos dalam argumennya. Jadi setiap nama file dengan pelolosan gaya-C tidak akan ditulis ke output dengan kesetiaan -echo
akan menerjemahkannya.echo
.Anda mungkin harus menggunakan
file
danuname
utilitas untuk mendapatkan gambaran yang lebih baik tentang apa yang sedang terjadi dengan mesin Anda. Kesalahan Anda adalah indikasi biner yang dapat dieksekusi dikompilasi untuk arsitektur sistem yang tidak kompatibel dengan yang di dalamnya ia dipanggil.Di mesin saya:
... mencetak ...
... karena semuanya benar dengan dunia di sana. Namun, inilah beberapa perintah dijalankan dari tablet android saya pada
ssh
koneksi ke desktop saya ...sumber
HOME=
hal yang jadi saya hanya dapat melakukan~
beberapa kali bukan./arm_ls
- untuk kenyamanan. Inti dari latihan ini adalah saya tidak dapat menggunakan arm binary pada desktop x86 saya, dan saya ingin outputfile
untuk menunjukkan bahwa itu adalah jenis biner yang sangat berbeda dari binary asli sydtem - yang ditampilkan di atas. Dan daripada shpw seluruh cross-compile, saya memilih untuk cpy biner yang tidak kompatibel yang saya miliki untuk saya di dev lengan saya ke perangkat x86 saya dan menunjukkan hasil dan cara menghapusbash
kesalahan.Dengan menggunakan bash (atau banyak shell lain), Anda dapat menggunakan penyelesaian tab untuk membuat daftar file:
sumber
Jika Anda menginginkan sesuatu yang lebih seperti
ls -l
(ukuran file, izin, pemilik, cap waktu, dll), makastat -- *
mungkin bermanfaat:Atau jika semua yang Anda ingin lakukan adalah misspell
ls
, maka cobalahsl
sebaliknya . ;-) (terus - coba ... Anda mungkin harus menginstalnya)sumber
Ada utilitas yang sangat mirip tersedia di banyak sistem:
Menurut halaman info itu setara dengan
ls -C -b
, tetapi itu adalah file biner mandiri.Manfaat menggunakan
dir
(daripada misalnya sistem penyelesaian shell) adalah tersedianya berbagai opsi seperti penyortiran, menampilkan file tersembunyi, pewarnaan dll., Seperti dalamls
program standar .BTW, saya kira namanya berasal dari sistem windows (atau lebih tepatnya dos).
sumber
menggunakan
sumber