IMHO Sie machen etwas einfach unnötig komplex. Warum nicht einfach so etwas machen?
NEWDIR=$(date -R);mkdir "$NEWDIR";cd "$NEWDIR"
cd "$(mkdir -v "$(date -R)"|sed s+.`(.*)'.*)"
Damit soll ein Verzeichnis mit dem Namen erstellt werden $(date -R)
. Ich könnte einfach cd machen $(date -R)
, aber der Schuldige ist, dass sich das Datum ändern konnte, seit der vorherige Befehl ausgeführt wurde ( mkdir
).
Deshalb möchte ich seine Ausgabe analysieren, um den Namen des erstellten Verzeichnisses zu ermitteln. Wie korrigiere ich den Code? Derzeit wird eine >
Eingabeaufforderung angezeigt, die angibt, dass ein Angebot fehlt.
Das Ändern '
in \'
ändert das Ergebnis nicht. Wenn Sie einen besseren Weg dazu haben, sagen Sie es bitte.
IMHO Sie machen etwas einfach unnötig komplex. Warum nicht einfach so etwas machen?
NEWDIR=$(date -R);mkdir "$NEWDIR";cd "$NEWDIR"
Mit bash können Sie auch die History-Erweiterung nutzen :
mkdir "$(date -R)" && cd !#:^
Der sed
Teil in Ihrem Befehl ist ziemlich gebrochen. Versuche dies:
sed -e "s/.*\`\(.*\)'.*/\1/"
Wenn Sie häufig mkdir
und cd
in einem Schritt möchten, probieren Sie diese Funktion (nur Bash):
mdc () { mkdir "$@" && cd "${!#}"; }
Es wickelt sich einfach um mkdir
. Verwenden Sie es wie mdc [mkdir options] newdir
und stellen Sie sicher, dass es newdir
zuletzt geht.
Ein Nebenpunkt: Sie müssen nicht sed
für die Ausgabe von verwenden date
, da er date
selbst einige gute Formatierungswerkzeuge hat. Wenn Sie date eine Zeichenfolge übergeben, die mit '+' beginnt, können Sie die Formatierungscodes von strftime verwenden .
$ date '+%Y-%m-%d_%H-%M-%S'
Ich würde persönlich etwas Sortierbares für den Verzeichnisnamen verwenden, was bedeutet, dass ich "Fr" niemals als frühen Teil des Namens verwenden würde.