existe-t-il un moyen (quel est le moyen le plus simple dans bash) de combiner les éléments suivants:
mkdir foo
cd foo
La page de manuel de mkdir
ne décrit rien de tel, peut-être existe-t-il une version raffinée de mkdir
? Je sais que cd
doit être intégré à Shell, donc la même chose serait vraie pour la fantaisie mkdir
...
Aliasing?
Une fonction?
mkcdir ()
{
mkdir -p -- "$1" &&
cd -P -- "$1"
}
Mettez le code ci-dessus dans le ~/.bashrc
ou un autre fichier provenant du ~/.bashrc
. Redémarrez ensuite le terminal pour que les modifications s'appliquent.
Après cela, exécutez simplement mkcdir foo
ou mkcdir "nested/path/in quotes"
.
Remarques:
"$1"
est le premier argument de la commande mkcdir
. Les citations qui l'entourent protègent l'argument s'il contient des espaces ou d'autres caractères spéciaux.--
s'assure que le nom passé pour le nouveau répertoire n'est pas interprété comme une option pour mkdir
ou cd
, donnant la possibilité de créer un répertoire commençant par -
ou --
.-p
utilisé sur mkdir
lui fait créer des répertoires supplémentaires s'ils n'existent pas encore, et -P
utilisé fait cd
résoudre les liens symboliques.Je pense que la création d'une fonction est la façon la plus appropriée de le faire, mais juste pour lister toutes les autres manières, vous pouvez écrire:
mkdir foo && cd "$_"
$_
est un paramètre spécial qui contient le dernier argument de la commande précédente. La citation autour de $_
assurez-vous que cela fonctionne même si le nom du dossier contient des espaces.
Dans certains shells, tels que zsh
, les guillemets doubles entourant le $_
ne sont pas nécessaires même lorsque le nom du répertoire contient des espaces. Ils sont cependant nécessaires pour que cette commande fonctionne dans bash
.
Par exemple, exécuter cette commande dans bash 3.2.57 sur macOS 10.13.6:
mkdir "my directory" && cd $_
donne cette sortie:
bash: cd: my: No such file or directory
Cependant, si nous entourons $_
avec des guillemets doubles, la commande revient avec succès.
bash-3.2$ mkdir "my directory" && cd "$_"
bash-3.2$ echo $?
0
bash-3.2$
Bash (à l'aide de désignateurs Word):
/tmp/bug$ mkdir "some dir"
/tmp/bug$ cd !$
cd "some dir"
/tmp/bug/some dir$
!$
se développe jusqu'au dernier argument de la ligne précédente de l'historique. Si vous avez des paramètres entre les deux, vous pouvez utiliser !:1
pour le premier argument, !:2
pour le deuxième argument, etc.
De bash (1):
Designateurs d'événements
Un indicateur d'événement est une référence à une entrée de ligne de commande dans la liste d'historique. Sauf si la référence est absolue, les événements sont relatifs à la position actuelle dans la liste d'historique.
!
Démarrer une substitution d'historique, sauf lorsqu'elle est suivie d'un blanc, d'un retour à la ligne, d'un retour chariot,=
ou(
(lorsque l'option shell extglob est activée à l'aide de la fonction intégrée shopt).[..]
Désignateurs de mots
Les désignateurs de mots sont utilisés pour sélectionner les mots souhaités de l'événement. UNE
:
sépare la spécification d'événement de l'indicateur Word. [..][..]
n Le n - ème mot.^
Le premier argument. Autrement dit, Word 1.$
Le dernier mot. Il s'agit généralement du dernier argument, mais sera étendu au mot zéro s'il n'y a qu'un seul mot dans la ligne.
Ces autres gars ne font que compliquer la vie, la voici:
eval {mkdir,cd}\ FOLDER\;