Как сделать "псевдоним" для длинного пути?
Я попытался создать "псевдоним" для пути, который я часто использую при работе с оболочкой. Я что-то пробовал, но это не удалось:
myFold="~/Files/Scripts/Main"
cd myFold
bash: cd: myFold: No such file or directory
Как мне заставить его работать?
Однако cd ~/Files/Scripts/Main
работает.
Ответы
Ответ 1
Поскольку переменная среды (псевдоним имеет другое определение в 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
Ответ 2
Существует опция оболочки cdable_vars
:
cdable_vars
Если это установлено, аргумент встроенной команды cd
которая не является каталогом, предполагается как имя переменной, значением которой является каталог, который нужно изменить.
Вы можете добавить это к вашему .bashrc
:
shopt -s cdable_vars
export myFold=$HOME/Files/Scripts/Main
Обратите внимание, что я заменил тильду на $HOME
; кавычки препятствуют расширению тильды, и Bash будет жаловаться на отсутствие каталога ~/Files/Scripts/Main
.
Теперь вы можете использовать это следующим образом:
cd myFold
$
Не требуется. В том-то и дело, что на самом деле - как показано в других ответах, cd "$myFold"
работает без опции оболочки. cd myFold
также работает, если путь в myFold
содержит пробелы, myFold
не требуется.
Обычно это даже работает с автозаполнением вкладок, так как функция _cd
в bash_completion
проверяет, установлен ли cdable_vars
- но не каждая реализация делает это одинаково, поэтому вам, возможно, bash_completion
снова bash_completion
в свой .bashrc
(или редактировать /etc/profile
для установить опцию оболочки).
Другие оболочки имеют аналогичные параметры, например Zsh ( cdablevars
).
Ответ 3
Может быть, лучше использовать ссылки
Soft Link
Символьная или программная ссылка (файлы или каталоги, более гибкие и самодокументируемые)
# 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
Ответ 4
Вы можете добавить любые пути к хэш-таблице вашего bash:
hash -d <CustomName>=<RealPath>
Теперь вы сможете cd ~<CustomName>
. Чтобы сделать его постоянным, добавьте его в свой bashrc script.
Обратите внимание, что эта хеш-таблица предназначена для предоставления кэша для bash не требуется поиск содержимого каждый раз, когда выполняется команда, поэтому эта таблица будет очищена при событиях, которые недействительны для кеша, например. изменение $PATH
.
Ответ 5
Сначала вам нужно $
получить доступ к значению "myFold", чтобы код работал в вопросе:
cd "$myFold"
Чтобы упростить это, вы создаете псевдоним в ~/.bashrc
:
alias cdmain='cd ~/Files/Scripts/Main'
Не забудьте указать .bashrc
один раз, чтобы сделать псевдоним доступным в текущем сеансе bash:
source ~/.bashrc
Теперь вы можете перейти в папку, используя:
cdmain
Ответ 6
Прежде всего, вам нужно удалить цитаты:
[email protected]:~$ myFolder=~/Files/Scripts/Main
Кавычки не позволяют оболочке расширять тильду до ее особого значения быть вашим каталогом $HOME
.
Затем вы можете использовать $myFolder
для переменной окружения:
[email protected]:~$ cd $myFolder
[email protected]:~/Files/Scripts/Main$
Чтобы создать псевдоним, вам нужно определить псевдоним:
alias myfolder="cd $myFolder"
Затем вы можете рассматривать этот вид команды:
[email protected]:~$ myFolder
[email protected]:~/Files/Scripts/Main$
Ответ 7
Другой вариант - использовать символическую ссылку. то есть:
ln -s ~/Files/Scripts/Main ~/myFold
После этого вы можете выполнять операции с ~/myFold
, например:
cp some_file.txt ~/myFold
который поместит файл в ~/Files/Scripts/Main
. Вы можете удалить символическую ссылку в любое время с помощью rm ~/myFold
, которая сохранит исходный каталог.
Ответ 8
но реальный псевдоним для каталога также возможен, попробуйте
myScripts="~/Files/Scripts/Main"
alias myScripts="cd $myScripts"
Таким образом, у вас есть общее соглашение об именах (для каждой пары dir/alias), и если вам нужно скопировать что-то из текущего каталога в myScripts, вам не нужно об этом думать.
IHTH
Ответ 9
Предыдущие ответы, которые я попробовал, не допускают автоматического расширения (автозаполнения) подкаталогов в каталоге с псевдонимами.
Однако если вы поместите каталог, который вы хотите создать псевдоним, в стек dirs
...
$ pushd ~/my/aliased/dir
... затем вы можете набрать dirs -v
, чтобы увидеть его числовую позицию в стеке:
0 ~/my/aliased/dir
1 ~/Downloads
2 /media/usbdrive
и ссылаться на него, используя этот номер для большинства, если не для всех команд, которые ожидают параметр каталога:
$ mv foo.txt ~0
Вы даже можете использовать Tab, чтобы показать непосредственные подкаталоги каталога с псевдонимами:
$ cd ~0/<Tab>
child_dir1 child_dir2
Ответ 10
Поместите следующую строку в ваш myscript
set myFold = '~/Files/Scripts/Main'
В терминале используют
source myscript
cd $myFold