Jak mogę utworzyć folder o nazwie podobnej do bieżącej daty w bash

1

Więc bawię się w moim .bashrc, tworząc różne aliasy i bawię się moim monitem. Próbuję teraz utworzyć alias, który przeniesie się do określonego katalogu, utworzę nowy katalog na podstawie daty i utworzę nowy plik. Wszystko w jednym aliasie. Oto co zrobiłem ...

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

Teraz, gdy wychodzę i uruchamiam hw Client.java, powinienem przejść do ~/Java/Homework/257/27-Jan/i otworzyć nowy plik o nazwie Client.java w vimie. Wszystko działa pięknie, ale zmienna daty nie działa poprawnie. Przenosi mnie do katalogu ~ / Java / Homework / 257 i tworzy dwa katalogi. Jeden o nazwie data, a drugi o nazwie +% d-% b i umieszcza plik Client.java w katalogu daty.

Myślałem, że mój eksport zmiennych daty po prostu nie działa, ale kiedy wpisuję $ DATE w wierszu polecenia, daje mi to 27-sty, tak jak powinno. Czy ktoś wie, co może być przyczyną tego? Mój przyjaciel zrobił coś bardzo podobnego, używając nieco innego formatu formatu dla daty i jego prace były w porządku. Jedyne, co mam inne na moim komputerze, to ukończenie bashu od homebrew, ale nie wiem, jak to wpłynęłoby na moją randkę ...

CaldwellYSR
źródło

Odpowiedzi:

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

Musisz go faktycznie wykonać. W przeciwnym razie po prostu przypisujesz wartość ciągu. Ponieważ brakuje ci cudzysłowów $DATE, zostaną one zinterpretowane jako dwa osobne argumenty datei +%d-%b.

Daniel Beck
źródło
To „działa” w pewien sposób. Naprawiono problem z datą, moim problemem jest teraz to, że najpierw nie robi wszystkiego innego w aliasie. Ma zmienić katalogi w mój katalog prac domowych, zanim utworzy katalog daty i otworzy vim.
CaldwellYSR
Nieważne, odkryłem problem! Zepsułem ścieżkę do katalogu zadań domowych.
CaldwellYSR
@CaldwellYSR Cieszę się, że moja odpowiedź pomogła.
Daniel Beck
2
@CaldwellYSR: Jeśli użyjesz powiedz cd wherever && mkdir "$DATE" && cd "$DATE" && vim(tzn. Użyj &&zamiast ;), łatwiej będzie zauważyć, kiedy jedno z tych poleceń środkowych nie powiedzie się (reszta nie uruchomi się, a jedno z nich (ostatnie uruchomienie) prawdopodobnie napisało komunikat o błędzie ).
Chris Johnsen
2

Spróbuj zdefiniować go jako funkcję w .bashrclub .alias:

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

Zapewnia to, że data jest określana za każdym razem, gdy używasz polecenia, a nie tylko podczas logowania / uruchamiania bash.

nohillside
źródło
To miało jakoś niefortunny efekt uboczny nieskończonej pętli i teraz mam 17 milionów katalogów głębokich z 27 stycznia XD
CaldwellYSR
Jak wywołałeś tę funkcję?
nohillside
go () ... czy nie tak to nazwać?
CaldwellYSR
Wpisanie gowystarczy
nohillside
1

Wzdłuż linii innych odpowiedzi: musisz wykonać polecenie daty. Prawdopodobnie najprostszym rozwiązaniem byłoby zmienić swoje cytaty na tyki:

export DATE=`date +%d-%b`
cm2
źródło
OH Wracają tyknięcia ... Myślałem, że to pojedyncze cytaty. Właśnie to zepsułem !!!
CaldwellYSR
W instrukcjach aliasów potrzebujesz cudzysłowów, ponieważ po prostu zastępujesz na przykład gotym ciągiem literalnym. Kiedy chcesz wykonać kod, możesz umieścić go w tylnych paskach lub użyć $(...)formalizmu wspomnianego w innych odpowiedziach.
cm2