web-dev-qa-db-fra.com

Une commande pour créer et changer de répertoire

Je cherche juste one command - rien avec && ou | - qui crée un répertoire puis change immédiatement votre répertoire actuel en répertoire nouvellement créé. (C'est une question que quelqu'un a eu pour ses examens de "linux-usage", il a fait une nouvelle commande qui l'a fait, mais cela ne lui a pas donné les points.) C'est sur un serveur Debian si ça compte.

34
Autom3

Je crois que vous recherchez ceci:

mkdir project1 && cd "$_"
48
Marian Zburlea

définissez un bash fonction à cette fin dans votre $HOME/.bashrc exemple:.

 function mkdcd () {
     mkdir "$1" && cd "$1"
 }

puis tapez mkdcd foodir dans votre shell interactif

Donc, stricto sensu, ce que vous voulez réaliser est impossible sans une fonction Shell contenant du && (ou au moins un ;) ... En d’autres termes, le but de l’exercice était de vous faire comprendre pourquoi les fonctions (ou alias) sont utiles dans un shell ....

PS il devrait s'agir d'une fonction et non d'un script (s'il s'agissait d'un script, la variable cd n'affecterait que le shell [sous-] exécutant le script, et non le shell parent interactif); il est impossible de créer une seule commande ou un seul exécutable (pas une fonction Shell) qui changerait le répertoire du Shell parent appelant (car chaque processus a son propre répertoire en cours, et vous ne pouvez modifier que le répertoire en cours de votre propre processus, pas du processus d’appel Shell).

PPS. Dans les shells Posix, vous devez supprimer le functionkeyword et définir la première ligne mkdcd() {.

27

Pour oh-my-zsh users: take 'directory_name'
Référence: Officiel oh-my-zsh github wiki

11
Avijit Gupta

Ajouter ce qui suit dans votre .bash_profile (ou l’équivalent) vous donnera une commande mkcd qui fera ce dont vous avez besoin:

# mkdir, cd into it
mkcd () {
    mkdir -p "$*"
    cd "$*"
}

Cet article l'explique plus en détail

8
colmjude

Je ne pense pas que cela soit possible, mais pour tous ceux qui se demandent quelle est la façon la plus simple de le faire (à ma connaissance) qui ne vous oblige pas à créer votre propre script est:

mkdir /myNewDir/
cd !$

Ainsi, vous n'avez pas besoin d'écrire deux fois le nom du nouveau répertoire.

!$ récupère le dernier argument ($) de la dernière commande (!).

(Il existe d'autres raccourcis utiles comme celui-ci, tels que !!, !* ou !startOfACommandInHistory. Recherchez sur le net pour plus d'informations)

Malheureusement, mkdir /myNewDir/ && cd !$ ne fonctionne pas: il récupère le dernier argument de la commande précédente, pas le dernier de la commande mkdir.

4
JeromeJ

Peut-être que je ne comprends pas tout à fait la question, mais

>mkdir temp ; cd temp

crée le répertoire temporaire, puis passe à ce répertoire.

1
Mike Lane
mkdir temp ; cd temp ; mv ../temp ../myname

Vous pouvez alias comme ceci:

alias mkcd 'mkdir temp ; cd temp ; mv ../temp ../'
0
user10705203