J'ai essayé d'utiliser la ls
commande et j'ai eu une erreur:
bash: /bin/ls: cannot execute binary file
Que puis-je utiliser à la place de cette commande?
linux
command-line
ls
jimmij
la source
la source
libc*so
ld-linux*so
sash
est implicite, est disponible sur Ubuntu Linux , sous forme de shells / sash dans l'arborescence des ports FreeBSD, sous forme de package Gentoo , ainsi que dans d'autres endroits, y compris directement de son auteur .Réponses:
Vous pouvez utiliser les commandes
echo
oufind
au lieu dels
:ou:
la source
echo -- *
-n
dans le répertoire courant, cela serait interprété comme un drapeau, pas quelque chose à faire écho.touch ./-n
rm -rf /tmp/foo && mkdir /tmp/foo && cd /tmp/foo && touch ./-n oops && set -x && ls && echo *
echo
ne semble pas l' honneur--
, en tant que tel . Alors, comment est-ilecho -- *
meilleur queecho "" *
ou, mieux encoreecho "The file(s) are:" *
,?Vous pouvez également utiliser la
printf
commande, au lieu de l'écho:printf
est supérieur àecho
dans cette situation en ce queecho
il ne respecte pas le "double tiret" (--
) pour signifier la fin de la liste des arguments (sur certains systèmes, dont Ubuntu 14.04 sur lequel je l'ai testé):Dans ce cas, vous ne pouvez pas obtenir le résultat souhaité avec
echo
(car un fichier appelé-n
est interprété comme une option et le double tiret ne fonctionne pas, vous devez donc utiliserprintf
).Notez que vous devez toujours utiliser une chaîne de format comme celle ci-dessus lorsque vous traitez avec des données inconnues
printf
, car sinon vous pourriez recevoir des résultats inattendus (merci à @ G-Man de l'avoir signalé dans les commentaires!):Un fichier appelé
\n
est interprété comme une nouvelle ligne parprintf
. Pour éviter cela, nous utilisons une chaîne de formatage pourprintf
(%s
) et lui passons les noms des fichiers (développés via globbing, comme précédemment).Cette
printf
solution de chaîne de formatage + peut gérer une grande variété de noms de fichiers (et traite également les fichiers "cachés", c'est-à-dire ceux commençant par un.
, les mêmes quels
):Si vos
printf
supports%q
, vous pouvez également utiliser cela (printf '%q\n' *
). Cela échappera aux espaces, aux nouvelles lignes, etc. s'il y a des caractères étranges dans vos noms de fichiers. (Merci à @muru dans le chat pour l'avoir signalé !)la source
'%s'
(avec\n
et / ou tout autre texte constant que vous souhaitez). Par exemple, essayez les commandestouch '%.0s' foo bar; ls; printf -- *
. Inversement, je ne vois pas pourquoi vous avez besoin--
lorsque vous avez une'%s\n'
chaîne de format.--
avec la chaîne de formatage et j'ai édité mon message pour répondre à l'autre chose.-n
nom de fichier honnêtement ne devrait pas être un problème du tout pour un Posix-2001 +echo
- sur les systèmes SUSv3 l'echo
utilitaire est nécessaire de ne pas accepter toutes les options que ce soit.bash
'secho
et quelques autres gèrent cependant l'option, maisbash
peuvent être compilés avec l'option build--enable-xpg-echo-default
pour qu'elle se comporte correctement tout le temps. Un comportement correct pourecho
, cependant, signifie toujours interpréter les échappements de jeu dans ses arguments. Ainsi, tout nom de fichier avec un échappement de style C ne serait pas écrit dans la sortie avec fidélité -echo
le traduirait.echo
.Vous devriez probablement utiliser les utilitaires
file
etuname
pour avoir une meilleure idée de ce qui se passe avec votre machine. Votre erreur indique un exécutable binaire compilé pour une architecture système incompatible avec celle sur laquelle il est invoqué.Sur ma machine:
... impressions ...
... parce que tout va bien avec le monde là-bas. Cependant, voici un petit aperçu de certaines commandes exécutées à partir de ma tablette Android sur une
ssh
connexion à mon bureau ...la source
HOME=
truc, c'est que je peux faire plusieurs~
fois au lieu de./arm_ls
- pour plus de commodité. L'intérêt de l'exercice est que je ne peux pas utiliser le binaire arm sur mon bureau x86, et je voulais que la sortie defile
montre qu'il s'agit d'un type binaire très différent de celui natif du sydtem - qui est montré en haut. Et donc plutôt que de shpw toute une compilation croisée, j'ai choisi de cpy un binaire incompatible que j'avais à ma disposition sur mon bras pour mon appareil x86 et de montrer les résultats et comment corriger l'bash
erreur.En utilisant bash (ou de nombreux autres shells), vous pouvez utiliser la complétion de tabulation pour lister les fichiers:
la source
Si vous voulez quelque chose de plus
ls -l
(taille du fichier, autorisations, propriétaire, horodatages, etc.), celastat -- *
pourrait être utile:Sinon, si tout ce que vous vouliez faire était de mal orthographier
ls
, essayezsl
plutôt . ;-) (continuez - essayez-le ... vous devrez peut-être l'installer)la source
Un utilitaire très similaire est disponible sur de nombreux systèmes:
Selon les pages d'informations, il est équivalent à
ls -C -b
, mais il s'agit d'un fichier binaire autonome.L'avantage de l'utilisation
dir
(au lieu de par exemple le système d'achèvement du shell) est la disponibilité de différentes options comme le tri, l'affichage des fichiers cachés, la coloration, etc., tout comme dans lels
programme standard .BTW, je suppose que son nom vient du système Windows (ou plutôt DOS).
la source
utilisation
la source