
Ich habe ein seltsames Problem mit einem Bash-Alias. In meiner .bashrc-Datei ist der folgende Alias definiert:
alias rec='nano `ls slurm-* | sort -t. -k3n | tail -1`'
Wenn ich den Alias jedoch rec
in der Shell erweitere, CTRL
ALT
E
erhalte ich:
nano Remember that all constraints must be readded!
Wenn ich den Alias ausführe, erhalte ich dasselbe:
nano Remember that all constraints must be readded!
Wenn ich verwende, which rec
erhalte ich die richtige Erweiterung:
alias rec='nano `ls slurm-* | sort -t. -k3n | tail -1`'
/home/spack/opt/spack/linux-rhel6-x86_64/gcc-4.4.7/nano-2.6.3-k2cwz7lwjd4zutb7r7cfo63apevyztuw/bin/nano
/home/spack/opt/spack/linux-rhel6-x86_64/gcc-4.4.7/coreutils-8.26-icpocuezd6r7ydd73ipkehkg345372eo/bin/sort
/home/spack/opt/spack/linux-rhel6-x86_64/gcc-4.4.7/coreutils-8.26-icpocuezd6r7ydd73ipkehkg345372eo/bin/tail
Dies Remember that all constraints must be readded!
ist die Ausgabe eines (angeblich) völlig unabhängigen Skripts, das ich geschrieben habe. Irgendeine Idee, was hier vor sich geht?
Antwort1
Sie analysieren ls
,das solltest du nicht tun. Ich denke esMaidie Ursache Ihres Problems sein.
Wenn beispielsweise mindestens einer Ihrer slurm-*
Dateinamen so lautet:
*\nRemember that all constraints must be readded!
oder
*\nRemember that all constraints must be readded!\n*
wo \n
eine neue Zeile ist, sort
erhält man mehr Zeilen als erwartet. Allein dieser Dateiname:
slurm-0.1.-5\nRemember that all constraints must be readded!
erzeugt sort
zwei Zeilen und in der Ausgabe Remember …
steht die Zeile nach der slurm-…
Zeile. Ich weiß nicht slurm-*
genau, wie Ihre Dateinamen aussehen. Ich bin mir nicht einmal sicher, ob das wirklich passiert. Mein Punkt ist, dass Sie die Ausgabe von nicht analysieren sollten ls
.
Ein weiteres schwaches Fragment ist, wo Sie das Argument für nicht zitieren nano
. Dies hat wahrscheinlich nichts mit Ihrem aktuellen Problem zu tun, aber denken Sie daran, nano a b
dass Nano a
dann bearbeitet b
und nicht "a b"
.