Einen Befehl zu erstellen, und wechseln Sie in das Verzeichnis
Ich bin auf der Suche nach eine Befehl — nichts mit &&
oder |
— dies erstellt ein Verzeichnis und dann ändert sofort Ihre aktuellen Verzeichnis in das neu erstellte Verzeichnis. (Dies ist eine Frage, die jemand für seine Prüfungen, "linux-Nutzung", machte er einen neuen Befehl, der das Tat, aber ich ließ ihm nicht die Chance, die Punkte.) Dies ist auf einem debian server, falls jene Gegenstände.
- Ich bin mir ziemlich sicher, dass die exam Frage war für Sie zu verstehen, warum bash-Funktionen notwendig sind.... Ein Skript wird nicht funktionieren (und das ist eine schlechte Antwort).
- Dies ist nicht eine gute Frage für stackoverflow, entweder wie @BasileStarynkevitch sagte, er hat nicht markiert, weil er ein Skript und nicht Funktion oder hat er einige andere syntaktische Fehler oder es war ein Fehler mit der Markierung/Frage selbst. Nur so finden Sie heraus, zu sprechen, um die Prüfungen Marker/Set-Methoden.
- Erstellen Sie ein Skript für diese beiden Befehl.
- Es kann nicht sein, ein Skript. Siehe meine Antwort (es sollte eine Funktion sein)
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich glaube du suchst das:
cd "$_"
eher, oder ein Verzeichnisname mit Leerzeichen Verhalten sich schlecht.definieren Sie eine bash - Funktion für diesen Zweck in Ihrem
$HOME/.bashrc
z.B.geben
mkdcd foodir
Ihrer interaktiven shellAlso, stricto sensu, was Sie erreichen wollen ist unmöglich, ohne eine shell-Funktion mit einigen
&&
(oder zumindest ein;
) ... In anderen Worten, der Zweck der übung war es, dass Sie verstehen, warum Funktionen (oder Aliase) sind nützlich in einer shell....PS es sollte eine Funktion sein, nicht ein Skript (wenn es ein Skript, das
cd
würde nur auf den [sub-] shell das script ausgeführt wurde, nicht den interaktiven Eltern-shell); es ist unmöglich, dass ein einzelner Befehl oder ausführbare Datei (nicht die shell-Funktion), was würde sich ändern, das Verzeichnis des aufrufenden interaktiven Eltern-shell (weil jeder Prozess hat seine eigenen aktuellen Verzeichnis, und Sie können nur ändern Sie das aktuelle Verzeichnis Ihres eigenen Prozesses, nicht des aufrufenden shell-Prozess).PPS. In Posix-shells sollten Sie entfernen das
function
Schlüsselwort, und die erste Zeile werdenmkdcd() {
$1
sollte"$1"
. Zweitens-ich denke, das zählt als "einen neue Befehl".chdir
syscall (cd
bash-builtin) laufen soll, in der interaktiven shell (nicht in einem child-Prozess der shell)function
keyword, sollten Sie entfernen die()
-- so ist Ihr code kompatibel mit ksh (Kompatibilität mit code geschrieben, mit der ksh-Shell-Erweiterungen ist warum die bash hat einefunction
keyword überhaupt). Jetzt, es ist kompatibel mit weder. Siehe auch wiki.bash-hackers.org/scripting/obsoleteFür oh-my-zsh Benutzer:
take 'directory_name'
Referenz: Offizielle oh-my-zsh github wiki
Setzen Sie Folgendes in Ihre .bash_profile (oder vergleichbar) wird Ihnen eine
mkcd
Befehl, dass werde tun, was Sie müssen:Dieser Artikel erklärt es im detail
"$*"
ist generell der Falsche Ding-es nimmt alle Ihre Argumente zusammen und wirft Sie zusammen mit dem ersten Zeichen von$IFS
als Trennzeichen. Das bedeutet, dass währendmkdir "Directory One" "Directory Two"
wird erstellen Sie zwei Verzeichnisse,mkcd "Directory One" "Directory Two"
werden versuchen, erstellen Sie ein einzelnes Verzeichnis mit dem NamenDirectory One Directory Two
.Ich glaube nicht, dass dies möglich ist, sondern für alle Menschen, die sich Fragen, was ist der einfachste Weg, dies zu tun (die ich kenne), die nicht erfordern, dass Sie erstellen Ihr eigenes Skript:
Diese Weise müssen Sie nicht brauchen, schreiben Sie den Namen des neuen Verzeichnisses ein, zweimal.
!$
ruft die Letzte ($
) argument des letzten Befehls (!
).(Es gibt mehrere nützliche Verknüpfungen wie, dass, wie
!!
,!*
oder!startOfACommandInHistory
. Suchen auf dem Netz für weitere Informationen)Leider
mkdir /myNewDir/&& cd !$
funktioniert nicht: es ruft das Letzte argument des vorherigen Befehls, nicht der Letzte, dermkdir
Befehl.Vielleicht bin ich nicht vollständig verstehen die Frage, aber
macht das temp-Verzeichnis, und wechselt dann in das Verzeichnis.
Können Sie alias wie diese:
Hast du nicht sagen, wenn Sie möchten, benennen Sie das Verzeichnis selbst.
Erstellen Sie ein temp-Verzeichnis und wechseln Sie in dieses.
Vielleicht können Sie einige shell-Skript.
Erste Zeile in shell-Skript wird das Verzeichnis erstellen und die zweite Zeile ändern, um erstellte Verzeichnis.