/ / bash / zsh alias: Kann ich die Argumente aufgreifen und in der Subshell verwenden? - bash, shell, zsh, alias, locale

bash / zsh alias: Kann ich die Argumente aufgreifen und in der Subshell verwenden? - bash, shell, zsh, alias, locale

Ich möchte einen Alias, der ein Verzeichnis gibtAuflistung in Wörterbuchreihenfolge mit "." Dateien zuerst. Es scheint, dass ein paar Möglichkeiten, dies zu erreichen, ohne mein eigenes Skript zu schreiben (was kein wirkliches Problem ist), darin bestehen, das Gebietsschema mit festzulegen LC_ALL="C". (Dies ist pro Manpage Sortieren und mehrere andere Websites).

Das Setzen des Gebietsschemas auf "C" kann jedoch dazu führen, dass einige Softwareinstallationen unterbrochen werden. Meine kurzfristige Lösung sieht also so aus (der Kürze halber ohne die zusätzlichen ls-Optionen):

alias ls="(LC_ALL="C"; /bin/ls)"

Dies erlaubt jedoch nicht, dass Argumente in die Subshell "weitergeleitet" werden.

Das funktioniert natĂĽrlich nicht:

alias ls="(LC_ALL="C"; /bin/ls $*)"

Gibt es eine Möglichkeit, mit einem einfachen Alias ​​damit umzugehen? (Im Gegensatz zum Schreiben eines Shell-Skripts / einer Shell-Funktion, die ich ausführen kann).

Antworten:

10 fĂĽr Antwort â„– 1

Sie benötigen keine Subshell. Sie können die Umgebung nur für den folgenden Befehl ändern, indem Sie dem Befehl die Variablenzuweisung voranstellen ohne Semikolon. Vergleichen Sie zum Beispiel die Ausgabe von

LC_ALL=C env | grep LC_ALL

mit der Ausgabe von

env | grep LC_ALL

Um es kurz zu machen, sollte der folgende Alias ​​für Sie funktionieren:

alias ls="LC_ALL=C /bin/ls"

ich benutzte /bin/ls wie in deinem Beispiel, aber wie von hervorgehoben Kamil Maciorowski In einem Kommentar zu einer anderen Antwort haben Sie Folgendes eingegeben: ls Kommando könnte auch ein Alias ​​sein, also solltest du vielleicht auch diese Alternative in Betracht ziehen:

alias ls="LC_ALL=C ls"