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

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.


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.


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`

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
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.