Wenn Sie den watch
Befehl ausführen, der einen Alias enthält, wird der Alias nicht erweitert. Ich habe es sowohl mit einfachen als auch mit doppelten Anführungszeichen versucht, und zwar mit dem folgenden Alias:
# alias ll
alias ll='ls -l --color=tty'
Der folgende Befehl schlägt fehl
# watch ll
sh: ll: command not found
Sollte die Befehlszeilenerweiterung in diesem Fall nicht funktionieren?
watch
da der Alias das nächste Wort seinwatch
muss und die Argumente vor dem Befehl benötigt werden, um ausgeführt zu werden. Wenn Sie es versucht habenwatch -n 10 <alias>
, wird der Alias durch Bash nicht erweitert. Um dies zu umgehen, benötigen Sie einen Alias, der die gewünschten Optionen enthält (z. B. `alias watch-10 = 'watch -n 10'), jedoch mit einem Leerzeichen am Ende.Vielleicht könnten wir den Alias manuell erweitern, bevor watch ihn sieht?
Erläuterung
Die Ausgabe von
alias ll
sieht so aus:Also setzen wir den Delimeter des Schnitts auf einfaches Anführungszeichen und schneiden das 2. Feld aus.
dh der erweiterte Alias. Das bildet dann die Argumente, denen gegeben wird
watch
.Machen Sie eine Funktion, um es zu tun
Dann,
funktioniert wie gewünscht. Das ist schrecklich und wird in allen möglichen Situationen scheitern. Es tut uns leid.
quelle
Ich dachte, hier ist das Grundproblem beim Ausführen
watch
, das Argument wird an "sh -c
" übergeben, was bedeutet, wennll
in dersh(dash shell's)
Umgebung kein Alias definiert ist, wird es nicht erweitert. Aber ich habe mich geirrt und das ist nicht der Fall, Chris 'Antwort oben ist richtig.quelle
watch 'alias ll="ls -l --color=tty"; type ll; ll'
.sh -c
" watch " " verwendet, gilt dies auch für Ihre Erklärungsh
. Habe ich recht?sh
. Beachten Sie, dass dies funktioniert :sh -c $'alias ll="ls -l --color=tty"\ntype ll\nll'
Habe
watch
eine neue interaktive Shell gestartet, die den Alias erweitern wird:(Das
-x
soll verhindern,watch
dass essh -c
zum Umbrechen des angegebenen Befehls verwendet wird. Wir wollen das nicht, weil wir-i
ansh
oder übergebenbash
müssen, um daraus eine interaktive Shell zu machen, die .bashrc liest und Aliase definiert. Mit-x
führt watch das aus Befehl mit exec.)Gah, eigentlich funktioniert das nicht. Nachdem die Ausgabe von 'll' einmal angezeigt wurde und dann 2 Sekunden lang geschlafen wurde, wird der Job im Hintergrund ausgeführt. Dabei ist Folgendes zu beachten:
Warum hat es aufgehört? Wo ist die offene Zahnspange geblieben
[
? Verdammt, ich dachte das wäre eine großartige Antwort, aber ich kann es nicht zum Laufen bringen.quelle