Ponieważ jest to zmienna środowiskowa (alias ma inną definicję w bash
), musisz ją ocenić za pomocą czegoś takiego:
cd "${myFold}"
lub:
cp "${myFold}/someFile" /somewhere/else
Ale w rzeczywistości jest to łatwiejsze, jeśli chcesz po prostu łatwo przejść do tego katalogu, utworzyć prawdziwy alias (w jednym z bash
plików startowych, takich jak .bashrc
), więc mogę zapisać naciśnięcia klawiszy:
alias myfold='cd ~/Files/Scripts/Main'
Następnie możesz po prostu użyć (bez cd
):
myfold
Aby pozbyć się definicji, użyj unalias
. Poniższy zapis pokazuje wszystkie te działania w akcji:
pax> cd ; pwd ; ls -ald footy
/home/pax
drwxr-xr-x 2 pax pax 4096 Jul 28 11:00 footy
pax> footydir=/home/pax/footy ; cd "$footydir" ; pwd
/home/pax/footy
pax> cd ; pwd
/home/pax
pax> alias footy='cd /home/pax/footy' ; footy ; pwd
/home/pax/footy
pax> unalias footy ; footy
bash: footy: command not found
in one of the bash startup files like .bashrc
. Umieszczenie aliasu w odpowiednim pliku startowym zapewni, że będzie on dostępny dla wszystkich sesji.Istnieje opcja powłoki
cdable_vars
:Możesz dodać to do swojego
.bashrc
:shopt -s cdable_vars export myFold=$HOME/Files/Scripts/Main
Zauważ, że zastąpiłem tyldę
$HOME
; cudzysłowy zapobiegają rozwijaniu tyldy, a Bash narzekałby, że nie ma katalogu~/Files/Scripts/Main
.Teraz możesz tego użyć w następujący sposób:
cd myFold
Nie jest
$
wymagane. Właściwie o to chodzi - jak pokazano w innych odpowiedziach,cd "$myFold"
działa bez opcji powłoki.cd myFold
działa również, jeśli ścieżka wmyFold
zawiera spacje, nie jest wymagane cytowanie.Zwykle działa to nawet z autouzupełnianiem tabulatorów, ponieważ
_cd
funkcjabash_completion
sprawdza, czycdable_vars
jest ustawiona - ale nie każda implementacja robi to w ten sam sposób, więc być może będziesz musiałbash_completion
ponownie pobrać źródło w swoim.bashrc
(lub edytować,/etc/profile
aby ustawić opcję powłoki).Inne powłoki mają podobne opcje, na przykład Zsh (
cdablevars
).źródło
setopt cdablevars
wygląda na to, że może być, ale w ogóle nie znam zsh.cdable_vars
cd
zapewniane przez bash- complete , które używa_cd
funkcji (complete -o nospace -F _cd cd
). Dodawanie-v
do tego (aby zakończyć na zmiennych) działa, ale może mieć niepożądane skutki uboczne - dla mnie pokazuje moje pełne środowisko po zakończeniu zakładki.Możesz dodać dowolne ścieżki do tablicy hashy twojego basha:
hash -d <CustomName>=<RealPath>
Teraz będziesz mógł
cd ~<CustomName>
. Aby był trwały, dodaj go do swojego skryptu bashrc .Zauważ, że ta tablica hashy ma na celu zapewnienie pamięci podręcznej dla basha, aby nie musiał wyszukiwać treści za każdym razem, gdy wykonywane jest polecenie, dlatego ta tabela zostanie wyczyszczona dla zdarzeń, które unieważniają pamięć podręczną, np
$PATH
. Modyfikacje .źródło
zsh
ale nie wbash
.zsh
tylko w, przynajmniej w moim systemie Ubuntu.Może lepiej użyć linków
Soft Link
Dowiązanie symboliczne lub miękkie (pliki lub katalogi, bardziej elastyczne i samodokumentujące się)
# Source Link ln -s /home/jake/doc/test/2000/something /home/jake/xxx
Hard Link
Twardy link (tylko pliki, mniej elastyczny i nie dokumentujący się samoczynnie)
# Source Link ln /home/jake/doc/test/2000/something /home/jake/xxx
Jak utworzyć łącze do katalogu
Wskazówka : jeśli nie chcesz widzieć linku w swoim domu, możesz zacząć od kropki. ; wtedy będzie domyślnie ukryty, a następnie możesz uzyskać do niego dostęp jak
cd ~/.myHiddelLongDirLink
źródło
Po pierwsze, musisz usunąć cytaty:
Cudzysłowy uniemożliwiają powłoce rozwinięcie tyldy do jej specjalnego znaczenia, jakim jest bycie twoim
$HOME
katalogiem.Możesz wtedy użyć
$myFolder
środowiskajako zmiennej powłoki:bashboy@host:~$ cd $myFolder bashboy@host:~/Files/Scripts/Main$
Aby utworzyć alias , musisz zdefiniować alias:
alias myfolder="cd $myFolder"
Możesz wtedy traktować tego rodzaju polecenie jak polecenie:
źródło
export
..bashrc
lub jakimkolwiek pliku zasobów, którego używasz, i zostanie zdefiniowany w bezpośredniej powłoce, ale nie w skryptach powłoki.Po pierwsze, potrzebujesz
$
dostępu do wartości „myFold”, aby kod w pytaniu działał:cd "$myFold"
Aby to uprościć, tworzysz alias w
~/.bashrc
:alias cdmain='cd ~/Files/Scripts/Main'
Nie zapomnij
.bashrc
podać źródła, aby alias stał się dostępny w bieżącej sesji basha:source ~/.bashrc
Teraz możesz przejść do folderu za pomocą:
źródło
Inną opcją byłoby użycie dowiązania symbolicznego. to znaczy:
Następnie możesz wykonywać operacje
~/myFold
, takie jak:który umieści plik
~/Files/Scripts/Main
. Możesz usunąć dowiązanie symboliczne w dowolnym momencie za pomocąrm ~/myFold
, co zachowa oryginalny katalog.źródło
cd myFold
wtedypwd
, pokaże, że jesteś w myFold. Jest to dla mnie przełom, ponieważ polecenia względne z kontrolą źródła p4 zależą od bieżącego katalogu.pwd -P
ale rzeczywisty alias do katalogu jest również możliwy, spróbuj
myScripts="~/Files/Scripts/Main" alias myScripts="cd $myScripts"
W ten sposób masz wspólną konwencję nazewnictwa (dla każdej pary dir / alias) i jeśli chcesz skopiować coś z bieżącego katalogu do myScripts, nie musisz o tym myśleć.
IHTH
źródło
Powyższe odpowiedzi, których próbowałem, nie pozwalają na automatyczne rozszerzanie (autouzupełnianie) podkatalogów katalogu z aliasami.
Jeśli jednak umieścisz katalog, który chcesz aliasować na
dirs
stosie ...$ pushd ~/my/aliased/dir
... możesz następnie wpisać,
dirs -v
aby zobaczyć jego numeryczną pozycję na stosie:i odwołuj się do niego, używając tego numeru dla większości, jeśli nie wszystkich poleceń, które oczekują parametru katalogu:
Możesz nawet użyć Tabdo pokazania bezpośrednich podkatalogów katalogu „z aliasami”:
$ cd ~0/<Tab> child_dir1 child_dir2
źródło
Umieść następujący wiersz w swoim skrypcie
set myFold = '~/Files/Scripts/Main'
W użyciu terminala
source myscript cd $myFold
źródło