Я попытался использовать ls
команду и получил ошибку:
bash: /bin/ls: cannot execute binary file
Что я могу использовать вместо этой команды?
linux
command-line
ls
jimmij
источник
источник
libc*so
или с твоимld-linux*so
sash
доступна в Ubuntu Linux , как shell / sash в дереве портов FreeBSD, как пакет Gentoo , а также в других местах, в том числе непосредственно от его автора .Ответы:
Вы можете использовать команды
echo
илиfind
вместоls
:или:
источник
echo -- *
-n
в текущем каталоге, он будет интерпретирован как флаг, а не как нечто, что должно быть отражено.touch ./-n
rm -rf /tmp/foo && mkdir /tmp/foo && cd /tmp/foo && touch ./-n oops && set -x && ls && echo *
echo
похоже, не в чести--
, как таковой . Так как жеecho -- *
лучшеecho "" *
или еще лучшеecho "The file(s) are:" *
?Вы также можете использовать
printf
команду вместо echo:printf
превосходитecho
в этой ситуации то,echo
что не использует «двойную черту» (--
) для обозначения конца списка аргументов (в некоторых системах, включая Ubuntu 14.04, на котором я тестировал):В этом случае вы не можете достичь желаемого результата с
echo
(так как вызываемый файл-n
интерпретируется как опция, а двойная черта не работает, поэтому вы должны использоватьprintf
).Обратите внимание, что вы всегда должны использовать строку формата, подобную приведенной выше, при работе с неизвестными данными
printf
, поскольку в противном случае вы можете получить неожиданные результаты (спасибо @ G-Man за то, что указал на это в комментариях!):Вызываемый файл
\n
интерпретируется как перевод строкиprintf
. Чтобы избежать этого, мы используем форматирующую строку дляprintf
(%s
) и передаем ей имена файлов (которые расширяются с помощью глобализации, как и раньше).Это
printf
решение + форматирование строки может обрабатывать самые разные имена файлов (а также обрабатывать «скрытые» файлы, то есть те, которые начинаются с.
, так же, какls
):Если вы
printf
поддерживаете%q
, вы также можете использовать это (printf '%q\n' *
). Это будет экранировать пробелы, символы новой строки и т. Д., Если в ваших именах файлов есть какие-то странные символы. (Спасибо @muru в чате за указание на это !)источник
'%s'
(с\n
и / или любым другим постоянным текстом, который вы хотите). Например, попробуйте командыtouch '%.0s' foo bar; ls; printf -- *
. И наоборот, я не понимаю, зачем вам это нужно,--
когда у вас есть'%s\n'
строка формата.--
с форматной строкой, и я отредактировал свой пост, чтобы обратиться к другой вещи.-n
Файла честно не должно быть проблемой вообще для POSIX-2001 +echo
- на SUSv3 системахecho
утилита требуется не принимать какие - либо варианты вообще.bash
Однакоecho
некоторые и некоторые другие обрабатывают эту опцию, ноbash
могут быть скомпилированы с опцией сборки,--enable-xpg-echo-default
чтобы она всегда работала правильно. Правильное поведениеecho
, тем не менее, означает всегда интерпретировать экранирование обратной реакции в своих аргументах. Таким образом, любое имя файла с экранированием в стиле C не будет записано в вывод с верностью -echo
переведет его.echo
.Вы , вероятно , следует использовать
file
иuname
утилиты , чтобы получить лучшее представление о том, что происходит, черт с вашей машиной. Ваша ошибка указывает на двоичный исполняемый файл, скомпилированный для архитектуры системы, несовместимой с той, на которой он вызывается.На моей машине:
... печать ...
... потому что с миром все в порядке. Тем не менее, вот несколько команд, которые запускаются с моего планшета Android при
ssh
подключении к моему рабочему столу ...источник
HOME=
том, что я могу просто сделать~
кучу раз вместо./arm_ls
- для удобства. Весь смысл упражнения заключается в том, что я не могу использовать двоичный файл arm на моем рабочем столе x86, и я хотел, чтобы выходные данныеfile
показали, что это совсем другой вид двоичного файла, чем родной для sydtem - который показан вверху. И поэтому вместо shpw целой кросс-компиляции я выбрал cpy несовместимый двоичный файл, который был у меня в руках на моем компьютере разработчика для моего устройства x86, и показал результаты и как вызватьbash
ошибку.Используя bash (или многие другие оболочки), вы можете использовать табуляцию для вывода списка файлов:
источник
Если вам нужно что-то более похожее
ls -l
(размер файла, права доступа, владелец, временные метки и т. Д.), Тогдаstat -- *
может быть полезно:В качестве альтернативы, если все, что вы хотели сделать, - это ошибка
ls
, попробуйтеsl
вместо этого . ;-) (продолжайте - попробуйте ... возможно, вам придется установить его)источник
Существует очень похожая утилита, доступная во многих системах:
Согласно информационным страницам это эквивалентно
ls -C -b
, но это отдельный двоичный файл.Преимущество использования
dir
(вместо, например, системы завершения оболочки) заключается в доступности различных опций, таких как сортировка, отображение скрытых файлов, раскраска и т. Д., Как в стандартнойls
программе.Кстати, я думаю, его название происходит от системы Windows (или, скорее, DOS).
источник
использование
источник