Ich habe versucht, den ls
Befehl zu verwenden und habe einen Fehler erhalten:
bash: /bin/ls: cannot execute binary file
Was kann ich anstelle dieses Befehls verwenden?
linux
command-line
ls
jimmij
quelle
quelle
libc*so
oder Ihrenld-linux*so
sash
ist es unter Ubuntu Linux als Shells / Sash im FreeBSD-Ports-Tree, als Gentoo-Paket und an anderen Orten, einschließlich direkt vom Autor , verfügbar .Antworten:
Sie können die Befehle
echo
oderfind
anstelle vonls
:oder:
quelle
echo -- *
-n
im aktuellen Verzeichnis eine Datei aufgerufen wird, wird diese als Flag interpretiert und nicht als Echo.touch ./-n
rm -rf /tmp/foo && mkdir /tmp/foo && cd /tmp/foo && touch ./-n oops && set -x && ls && echo *
echo
scheint nicht zu Ehre--
, per se . Wie ist esecho -- *
besser alsecho "" *
oder noch besserecho "The file(s) are:" *
?Sie können auch den
printf
Befehl anstelle von echo verwenden:printf
überlegen istecho
in dieser Situation, dassecho
sie nicht den „doppelten Bindestrichs“ (Achtung--
) bedeutet das Ende der Argumentliste (auf einigen Systemen, darunter Ubuntu 14.04 , die getestet es auf dem , was ich):In diesem Fall können Sie mit nicht das gewünschte Ergebnis erzielen
echo
(da eine aufgerufene Datei-n
als Option interpretiert wird und der doppelte Bindestrich nicht funktioniert, müssen Sie verwendenprintf
).Beachten Sie, dass Sie im Umgang mit unbekannten Daten immer einen Formatstring wie oben verwenden sollten
printf
, da Sie sonst unerwartete Ergebnisse erhalten könnten (danke an @ G-Man für den Hinweis in den Kommentaren!):Eine aufgerufene Datei
\n
wird von als Newline interpretiertprintf
. Um dies zu vermeiden, verwenden wir einen Formatierungsstring fürprintf
(%s
) und übergeben ihm die Namen der Dateien (wie zuvor durch Globbing erweitert).Diese
printf
+ Formatierung String - Lösung kann eine Vielzahl von Dateinamen umgehen (und auch behandelt „versteckt“ Dateien, das heißt, diejenigen mit einem Start.
, den gleichen wiels
):Wenn Sie dies
printf
unterstützen%q
, können Sie auch that (printf '%q\n' *
) verwenden. Dadurch werden Leerzeichen, Zeilenumbrüche usw. ausgeblendet, wenn Ihre Dateinamen seltsame Zeichen enthalten. (Danke an @muru im Chat für den Hinweis !)quelle
'%s'
(mit\n
und / oder jede andere Konstante gewünschten Text). Probieren Sie zum Beispiel die Befehle austouch '%.0s' foo bar; ls; printf -- *
. Umgekehrt verstehe ich nicht, warum Sie brauchen,--
wenn Sie eine'%s\n'
Formatzeichenfolge haben.--
mit der Formatzeichenfolge übersehen und meinen Beitrag bearbeitet, um das andere zu adressieren.-n
Dateiname ehrlich soll nicht ein Problem für ein POSIX-2001 sein +echo
- auf SUSv3 Systemen derecho
Dienstprogramm erforderlich keine Optionen überhaupt zu akzeptieren.bash
secho
und einige andere behandeln die Option zwar,bash
können jedoch mit der Build-Option kompiliert werden--enable-xpg-echo-default
, damit sie sich die ganze Zeit über richtig verhält. Richtiges Verhaltenecho
bedeutet jedoch, dass die Argumente immer mit einem Flankenspiel versehen werden. Daher würde jeder Dateiname mit einem C-Escape nicht mit Wiedergabetreue ausgegeben - erecho
würde übersetzt.echo
.Sie sollten wahrscheinlich die Hilfsprogramme
file
und verwendenuname
, um eine bessere Vorstellung davon zu bekommen, was zum Teufel mit Ihrer Maschine los ist. Ihr Fehler weist auf eine ausführbare Binärdatei hin, die für eine Systemarchitektur kompiliert wurde, die mit der nicht kompatibel ist, für die sie aufgerufen wurde.Auf meiner Maschine:
... druckt ...
... weil dort alles in Ordnung mit der Welt ist. Hier ist jedoch eine kleine Auswahl von Befehlen, die von meinem Android-Tablet auf einer
ssh
Verbindung zu meinem Desktop ausgeführt werden ...quelle
HOME=
Sache ist, dass ich einfach~
ein paar Mal machen kann, anstatt./arm_ls
- aus Bequemlichkeitsgründen. Der springende Punkt der Übung ist, dass ich die Arm-Binärdatei auf meinem x86-Desktop nicht verwenden kann, und ich wollte, dass die Ausgabe vonfile
zeigt, dass es eine sehr andere Art von Binärdatei ist als die systemeigene - die oben gezeigt wird. Und so entschied ich mich, anstatt eine ganze Cross-Kompilierung zu erstellen, eine inkompatible Binärdatei, die mir auf meinem Arm Dev zur Verfügung stand, auf mein x86-Gerät zu kopieren und die Ergebnisse und diebash
Fehlerbehebung zu zeigen.Mit bash (oder vielen anderen Shells) können Sie die Tabulatorvervollständigung verwenden, um Dateien aufzulisten:
quelle
Wenn Sie etwas Ähnliches wünschen
ls -l
(Dateigröße, Berechtigungen, Eigentümer, Zeitstempel usw.),stat -- *
kann dies hilfreich sein:Alternativ, wenn alles, was Sie tun wollten, eine falsche Schreibweise
ls
ist versuchen Sie essl
stattdessen . ;-) (weitermachen - probieren Sie es aus ... möglicherweise müssen Sie es installieren)quelle
Auf vielen Systemen ist ein sehr ähnliches Dienstprogramm verfügbar:
Laut den Infoseiten ist es äquivalent zu
ls -C -b
, aber es ist eine eigenständige Binärdatei.Der Vorteil der Verwendung
dir
(anstelle von beispielsweise einem Shell-Vervollständigungssystem) besteht in der Verfügbarkeit verschiedener Optionen wie Sortieren, Anzeigen versteckter Dateien, Färben usw., genau wie im Standardprogrammls
.Übrigens, ich denke, der Name kommt von Windows (oder besser gesagt DOS).
quelle
verwenden
quelle