Comment créer un dossier nommé comme la date du jour dans bash

1

Donc, je déconne mon .bashrc de faire différents alias et de jouer avec mon invite. J'essaie maintenant de créer un alias qui se déplacera dans un répertoire spécifique, créera un nouveau répertoire en fonction de la date et créera un nouveau fichier. Tout en un alias. Voici ce que j'ai fait ...

export DATE="$( date +%d-%b )"
alias hw='cd ~/Java/Homework/257; mkdir $DATE; cd $DATE; vim'

Maintenant, si je sors et cours hw Client.java il devrait entrer dans ~/Java/Homework/257/27-Jan/ et ouvrez un nouveau fichier appelé Client.java dans vim. Tout fonctionne à merveille, sauf que la variable de date ne fonctionne pas correctement. Cela me déplace dans le répertoire ~ / Java / Homework / 257 et crée deux répertoires. Un appelé date et un autre appelé +% d-% b et place le fichier Client.java dans le répertoire des dates.

Je pensais que mon export de variable de date ne fonctionnait tout simplement pas, mais lorsque je tape $ DATE à l'invite de commande, il me donne le 27 janvier comme il se doit. Alors, est-ce que quelqu'un sait ce qui pourrait en être la cause? Un de mes amis a fait quelque chose de très similaire à celui-ci en utilisant un format légèrement différent pour la date et ses œuvres. La seule chose qui me différencie sur mon ordinateur est la finalisation de homebrew mais je ne vois pas en quoi cela affecterait ma date ...

CaldwellYSR
la source

Réponses:

2
export DATE="$( date +%d-%b )"

Vous devez réellement l'exécuter. Sinon, vous n'attribuez qu'une valeur de chaîne. Puisque vous manquez des citations autour du $DATE, il sera interprété comme deux arguments distincts, date et +%d-%b.

Daniel Beck
la source
Cela "fonctionne" en quelque sorte. Cela a résolu le problème de la date. Mon problème actuel est qu’il ne fait pas tout d’abord le reste du pseudonyme. Il est supposé changer de répertoire dans mon répertoire de travail avant de créer le répertoire de date et d'ouvrir vim.
CaldwellYSR
Peu importe, j'ai compris le problème! J'ai foiré le chemin du répertoire des devoirs.
CaldwellYSR
@CaldwellYSR Glad ma réponse a aidé.
Daniel Beck
2
@CaldwellYSR: Si vous utilisez dit cd wherever && mkdir "$DATE" && cd "$DATE" && vim (c'est-à-dire utiliser && au lieu de ; ), il sera plus facile de remarquer quand l’une de ces commandes du milieu échouera (le reste ne sera pas exécuté et celle qui échoue (la dernière exécutée) aura probablement écrit un message d’erreur).
Chris Johnsen
2

Essayez de définir go comme une fonction dans .bashrc ou .alias:

go() {
    DATE=$(date +%d-%b)
    mkdir "$DATE"
    cd "$DATE"
    vim "$1"
}

Cela garantit que la date est déterminée chaque fois que vous utilisez la commande et pas seulement lorsque vous vous connectez / démarrez bash.

nohillside
la source
Cela a eu l’effet secondaire malheureux d’une boucle infinie d’une manière ou d’une autre et maintenant j’ai des répertoires d’une profondeur de 17 millions de dollars le 27 janvier XD
CaldwellYSR
Comment avez-vous appelé la fonction?
nohillside
go () ... n'est-ce pas comment l'appeler?
CaldwellYSR
Il suffit de taper go est assez
nohillside
1

Dans le sens des autres réponses: vous devez exécuter la commande de date. La solution la plus simple serait probablement de changer vos guillemets pour revenir en arrière:

export DATE=`date +%d-%b`
cm2
la source
OH Ils sont de retour ticks ... Je pensais que c'était des guillemets simples. C'est ce que je foirais !!!
CaldwellYSR
Dans les instructions alias, vous avez besoin de guillemets, car vous venez de remplacer, par exemple, go avec cette chaîne littérale. Lorsque vous voulez exécuter du code, vous pouvez le placer à l’arrière ou utiliser le $(...) formalisme mentionné dans les autres réponses.
cm2