Поскольку это переменная среды (псевдоним имеет другое определение bash
), вам нужно оценить ее примерно так:
cd "${myFold}"
или:
cp "${myFold}/someFile" /somewhere/else
Но на самом деле мне проще, если вы просто хотите легко переключиться в этот каталог, создать настоящий псевдоним (в одном из bash
файлов запуска, например .bashrc
), чтобы я мог сохранить нажатия клавиш:
alias myfold='cd ~/Files/Scripts/Main'
Тогда вы можете просто использовать (без cd
):
myfold
Чтобы избавиться от определения, вы используете unalias
. Следующая стенограмма показывает все это в действии:
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
. Помещение псевдонима в подходящий файл запуска обеспечит его доступность для всех сеансов.Есть вариант оболочки
cdable_vars
:Вы можете добавить это в свой
.bashrc
:shopt -s cdable_vars export myFold=$HOME/Files/Scripts/Main
Обратите внимание, что я заменил тильду на
$HOME
; кавычки предотвращают раскрытие тильды, и Bash будет жаловаться на отсутствие каталога~/Files/Scripts/Main
.Теперь вы можете использовать это следующим образом:
cd myFold
Не
$
требуется. На самом деле в этом весь смысл - как показано в других ответах,cd "$myFold"
работает без опции оболочки.cd myFold
также работает, если путьmyFold
содержит пробелы, кавычки не требуются.Обычно это работает даже с автозаполнением вкладок, так как
_cd
функция вbash_completion
проверяет, установлена ли функция,cdable_vars
но не каждая реализация делает это одинаково, поэтому вам, возможно, придетсяbash_completion
снова исходить из вашего.bashrc
(или отредактировать,/etc/profile
чтобы установить параметр оболочки).Другие оболочки имеют аналогичные параметры, например Zsh (
cdablevars
).источник
setopt cdablevars
похоже, но я вообще не знаю zsh.cdable_vars
cd
предоставляемое bash-completing, которое использует_cd
функцию (complete -o nospace -F _cd cd
). Добавление-v
к этому (для завершения по переменным) работает, но может иметь нежелательные побочные эффекты - для меня он показывает всю мою среду, когда я завершаю табуляцию.Может лучше использовать ссылки
Мягкая ссылка
Символьная или программная ссылка (файлы или каталоги, более гибкие и самодокументируемые)
# Source Link ln -s /home/jake/doc/test/2000/something /home/jake/xxx
Жесткая ссылка
Жесткая ссылка (только файлы, менее гибкие и не самодокументирующиеся)
# Source Link ln /home/jake/doc/test/2000/something /home/jake/xxx
Как создать ссылку на каталог
Подсказка : если вам не нужно видеть ссылку в своем доме, вы можете начать ее с точки. ; тогда он будет скрыт по умолчанию, тогда вы можете получить к нему доступ, как
cd ~/.myHiddelLongDirLink
источник
Вы можете добавить любые пути в хеш-таблицу вашего bash:
hash -d <CustomName>=<RealPath>
Теперь ты сможешь это сделать
cd ~<CustomName>
. Чтобы сделать его постоянным, добавьте его в свой сценарий bashrc .Обратите внимание, что эта хеш-таблица предназначена для обеспечения кеша, чтобы bash не нуждался в поиске содержимого каждый раз при выполнении команды, поэтому эта таблица будет очищаться при событиях, которые делают кеш недействительным, например, при изменении
$PATH
.источник
zsh
но не внутриbash
.zsh
только, по крайней мере, в моей системе Ubuntu.Во-первых, вам нужно удалить кавычки:
Кавычки не позволяют оболочке расширять тильду до ее особого значения - вашего
$HOME
каталога.Затем вы можете использовать
$myFolder
окружающую среду, без оболочки переменной:bashboy@host:~$ cd $myFolder bashboy@host:~/Files/Scripts/Main$
Чтобы создать псевдоним , вам нужно определить псевдоним:
alias myfolder="cd $myFolder"
Затем вы можете рассматривать это как команду:
источник
export
это не делаете ..bashrc
или любом другом файле ресурсов, который вы используете, и он будет определен непосредственно в оболочке, но не в сценариях оболочки.Во-первых, вам нужно
$
получить доступ к значению myFold, чтобы код в вопросе работал:cd "$myFold"
Чтобы упростить это, вы создаете псевдоним в
~/.bashrc
:alias cdmain='cd ~/Files/Scripts/Main'
Не забудьте указать
.bashrc
один раз, чтобы псевдоним стал доступен в текущем сеансе bash:source ~/.bashrc
Теперь вы можете перейти в папку, используя:
источник
Другой вариант - использовать символическую ссылку. то есть:
После этого вы можете выполнять такие операции
~/myFold
, как:который поместит файл в формат
~/Files/Scripts/Main
. Вы можете удалить символическую ссылку в любое время с помощьюrm ~/myFold
, что сохранит исходный каталог.источник
cd myFold
тогдаpwd
, он покажет, что вы находитесь в myFold. Для меня это нарушает правила, потому что относительные команды с системой управления версиями p4 зависят от текущего каталога.pwd -P
но фактический псевдоним для каталога также возможен, попробуйте
myScripts="~/Files/Scripts/Main" alias myScripts="cd $myScripts"
Таким образом, у вас есть общее соглашение об именах (для каждой пары dir / alias), и если вам нужно скопировать что-то из текущего каталога в myScripts, вам не нужно об этом думать.
IHTH
источник
Предыдущие ответы, которые я пробовал, не допускают автоматического расширения (автозаполнения) подкаталогов каталога с псевдонимом.
Однако, если вы поместите каталог, которому хотите присвоить псевдоним, в
dirs
стек ...$ pushd ~/my/aliased/dir
... затем вы можете ввести,
dirs -v
чтобы увидеть его числовую позицию в стеке:и обращайтесь к нему, используя этот номер для большинства, если не всех команд, которые ожидают параметр каталога:
Вы даже можете использовать, Tabчтобы показать непосредственные подкаталоги каталога с псевдонимом:
$ cd ~0/<Tab> child_dir1 child_dir2
источник
Поместите следующую строку в свой myscript
set myFold = '~/Files/Scripts/Main'
В терминале используйте
source myscript cd $myFold
источник