Eu tentei usar o ls
comando e recebi um erro:
bash: /bin/ls: cannot execute binary file
O que posso usar em vez deste comando?
linux
command-line
ls
jimmij
fonte
fonte
libc*so
ou seuld-linux*so
sash
está disponível no Ubuntu Linux , como shells / sash na árvore de portas do FreeBSD, como um pacote Gentoo , além de outros locais, inclusive diretamente de seu autor .Respostas:
Você pode usar os comandos
echo
ou emfind
vez dels
:ou:
fonte
echo -- *
-n
no diretório atual, isso seria interpretado como uma bandeira, não como algo para ecoar.touch ./-n
rm -rf /tmp/foo && mkdir /tmp/foo && cd /tmp/foo && touch ./-n oops && set -x && ls && echo *
echo
parece não honrar--
, por si só . Então, como éecho -- *
melhorecho "" *
ou melhor aindaecho "The file(s) are:" *
?Você também pode usar o
printf
comando, em vez de echo:printf
é superior aecho
nesta situação em queecho
se não respeitar o "traço duplo" (--
) para significar o fim da lista de argumentos (em alguns sistemas, incluindo Ubuntu 14.04 que é o que eu testei-o em):Nesse caso, você não pode obter o resultado desejado com
echo
(já que um arquivo chamado-n
é interpretado como uma opção e o traço duplo não funciona, portanto, você deve usá-loprintf
).Observe que você sempre deve usar uma string de formato como a acima ao lidar com dados desconhecidos
printf
, pois caso contrário, poderá receber resultados inesperados (obrigado ao @ G-Man por apontar isso nos comentários!):Um arquivo chamado
\n
é interpretado como uma nova linha porprintf
. Para evitar isso, usamos uma string de formatação paraprintf
(%s
) e passamos os nomes dos arquivos (expandidos via globbing, como antes).Essa
printf
solução de sequência de formatação + pode lidar com uma grande variedade de nomes de arquivos (e também trata arquivos "ocultos", ou seja, aqueles que começam com a.
, da mesma forma quels
):Se você
printf
suporta%q
, você também pode usar isso (printf '%q\n' *
). Isso escapará a espaços, novas linhas etc. se houver caracteres estranhos em seus nomes de arquivos. (Obrigado a @muru no chat por apontar isso !)fonte
'%s'
(com\n
e / ou qualquer outro texto constante que desejar). Por exemplo, tente os comandostouch '%.0s' foo bar; ls; printf -- *
. Por outro lado, não vejo por que você precisa--
quando possui uma'%s\n'
string de formato.--
com a string de formato e editei minha postagem para resolver a outra coisa.-n
nome do arquivo honestamente não deve ser um problema para um POSIX-2001 +echo
- nos sistemas SUSv3, oecho
utilitário é obrigado a não aceitar nenhuma opção.bash
'secho
e alguns outros fazem lidar com a opção embora, masbash
pode ser compilado com a opção de construção--enable-xpg-echo-default
para torná-lo comportar corretamente o tempo todo. O comportamento corretoecho
, no entanto, significa sempre interpretar escapes de folga em seus argumentos. Portanto, qualquer nome de arquivo com uma fuga no estilo C não seria gravado na saída com fidelidade -echo
o traduziria.echo
.Você provavelmente deve usar os utilitários
file
euname
para ter uma idéia melhor do que diabos está acontecendo com sua máquina. Seu erro é indicativo de um executável binário compilado para uma arquitetura de sistema incompatível com a qual é invocada.Na minha máquina:
... imprime ...
... porque está tudo bem com o mundo lá. No entanto, aqui estão alguns comandos executados no meu tablet Android em uma
ssh
conexão com a minha área de trabalho ...fonte
HOME=
problema é que eu posso fazer~
várias vezes em vez de./arm_ls
- por conveniência. O ponto principal do exercício é que eu não posso usar o binário do braço no meu desktop x86 e queria que a saídafile
mostrasse que é um tipo de binário muito diferente do binário do que o nativo do sydtem - que é mostrado na parte superior. E assim, em vez de enviar uma compilação cruzada inteira, optei por copiar um binário incompatível que eu tinha disponível para mim no meu braço dev para o meu dispositivo x86 e mostrar os resultados e como gerar obash
erro.Usando o bash (ou muitos outros shells), você pode usar o preenchimento de guias para listar arquivos:
fonte
Se você quiser algo mais parecido com
ls -l
(tamanho do arquivo, permissões, proprietário, registros de data e hora, etc.),stat -- *
poderá ser útil:Alternativamente, se tudo o que você queria fazer é cometer erros de ortografia
ls
, em seguida, tentarsl
em vez . ;-) (vá em frente - experimente ... talvez seja necessário instalá-lo)fonte
Existe um utilitário muito semelhante disponível em muitos sistemas:
De acordo com as páginas de informações, é equivalente
ls -C -b
, mas é um arquivo binário independente.O benefício de usar
dir
(em vez de, por exemplo, o sistema de conclusão de shell) é a disponibilidade de diferentes opções, como classificação, exibição de arquivos ocultos, cores etc., assim como nols
programa padrão .BTW, acho que o nome vem do sistema Windows (ou melhor, DOS).
fonte
usar
fonte