Próbowałem użyć ls
polecenia i wystąpił błąd:
bash: /bin/ls: cannot execute binary file
Czego mogę użyć zamiast tego polecenia?
linux
command-line
ls
jimmij
źródło
źródło
libc*so
lub swójld-linux*so
sash
jest dostępne w systemie Ubuntu Linux , jako powłoki / sash w drzewie portów FreeBSD, jako pakiet Gentoo , a także w innych miejscach, w tym bezpośrednio od jego autora .Odpowiedzi:
Możesz użyć poleceń
echo
lubfind
zamiastls
:lub:
źródło
echo -- *
-n
w bieżącym katalogu znajduje się plik wywoływany , zostanie on zinterpretowany jako flaga, a nie coś do echa.touch ./-n
rm -rf /tmp/foo && mkdir /tmp/foo && cd /tmp/foo && touch ./-n oops && set -x && ls && echo *
echo
Nie wydaje się cześć--
, per se . Jak więc może byćecho -- *
coś lepszegoecho "" *
lub jeszcze lepszegoecho "The file(s) are:" *
?Możesz także użyć
printf
polecenia zamiast echa:printf
jest lepszyecho
w tej sytuacji, żeecho
nie nie przestrzega zasady „podwójną kreskę” (--
) oznaczać końca listy argument (w niektórych systemach, w tym Ubuntu 14.04, który jest co testowałem go):W takim przypadku nie można osiągnąć pożądanego rezultatu za pomocą
echo
(ponieważ plik o nazwie-n
zostaje zinterpretowany jako opcja, a podwójne myślenie nie działa, więc musisz użyćprintf
).Pamiętaj, że zawsze powinieneś używać ciągu formatu takiego jak powyższy, gdy
printf
masz do czynienia z nieznanymi danymi , ponieważ w przeciwnym razie możesz otrzymać nieoczekiwane wyniki (dzięki @ G-Man za wskazanie tego w komentarzach!):Wywołany plik
\n
jest interpretowany jako nowy wiersz przezprintf
. Aby tego uniknąć, używamy ciągu formatującego dlaprintf
(%s
) i przekazujemy mu nazwy plików (rozwinięte przez globbing, jak poprzednio).To
printf
+ ciąg formatujący może obsługiwać wiele różnych nazw plików (a także traktuje pliki „ukryte”, to znaczy te zaczynające się od.
, takie same jakls
):Jeśli twoje
printf
wsparcie%q
, możesz również użyć tego (printf '%q\n' *
). Spowoduje to uniknięcie spacji, znaków nowej linii itp., Jeśli w nazwach plików znajdują się dziwne znaki. (Dzięki @muru na czacie za zwrócenie na to uwagi !)źródło
'%s'
(z\n
dowolnym innym stałym tekstem). Na przykład wypróbuj poleceniatouch '%.0s' foo bar; ls; printf -- *
. I odwrotnie, nie rozumiem, dlaczego potrzebujesz,--
gdy masz'%s\n'
ciąg formatu.--
ciągi formatujące i zredagowałem swój post, aby zająć się drugą rzeczą.-n
pliku szczerze mówiąc nie powinna stanowić problemu dla POSIX-2001 +echo
- w systemach SUSv3echo
narzędzie musi nie akceptować żadnych opcji.bash
„secho
, a niektóre robią inni obsługiwać opcję chociaż, alebash
może zostać skompilowany z opcją build--enable-xpg-echo-default
by zachowywał się poprawnie przez cały czas. Prawidłowe zachowanieecho
oznacza jednak zawsze interpretację ucieczki w argumentach. Tak więc każda nazwa pliku ze znakiem ucieczki w stylu C nie byłaby zapisywana do wyjścia z wiernością -echo
tłumaczyłaby to.echo
.Prawdopodobnie powinieneś użyć narzędzi
file
i,uname
aby uzyskać lepszy pogląd na to, co u diabła dzieje się na twoim komputerze. Twój błąd wskazuje na binarny plik wykonywalny skompilowany dla architektury systemu niezgodnej z architekturą, na której jest wywoływany.Na mojej maszynie:
... drukuje ...
... ponieważ wszystko jest w porządku z tamtym światem. Oto jednak kilka poleceń uruchamianych z mojego tabletu z Androidem po
ssh
połączeniu z komputerem ...źródło
HOME=
o to, że mogę zrobić~
kilka razy zamiast./arm_ls
- dla wygody. Cały sens ćwiczenia polega na tym, że nie mogę użyć pliku binarnego arm na moim pulpicie x86 i chciałem, aby wynikfile
pokazał, że jest to bardzo odmienny rodzaj pliku binarnego niż natywny plik sydtem - co pokazano na górze. Więc zamiast shpw całej kompilacji krzyżowej, wybrałem cpy do niekompatybilnego pliku binarnego, który miałem do dyspozycji na moim ramieniu dev dla mojego urządzenia x86 i pokazałem wyniki i jak naprawićbash
błąd.Używając bash (lub wielu innych powłok), możesz użyć uzupełniania tabulatorów, aby wyświetlić listę plików:
źródło
Jeśli chcesz czegoś bardziej podobnego
ls -l
(rozmiar pliku, uprawnienia, właściciel, znaczniki czasu itp.),stat -- *
Może być pomocne:Alternatywnie, jeśli wszystko, co chciałeś zrobić, to źle napisać
ls
, spróbujsl
zamiast tego . ;-) (kontynuuj - spróbuj ... może być konieczne zainstalowanie)źródło
Istnieje bardzo podobne narzędzie dostępne w wielu systemach:
Według stron informacyjnych jest to równoważne
ls -C -b
, ale jest to samodzielny plik binarny.Zaletą używania
dir
(zamiast na przykład systemu uzupełniania powłoki) jest dostępność różnych opcji, takich jak sortowanie, wyświetlanie ukrytych plików, kolorowanie itp., Tak jak w standardowymls
programie.BTW, chyba nazwa pochodzi od systemu Windows (a raczej dos).
źródło
posługiwać się
źródło