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 ...

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.


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.


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`

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
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.