Подтвердить что ты не робот

Как сделать "псевдоним" для длинного пути?

Я попытался создать "псевдоним" для пути, который я часто использую при работе с оболочкой. Я что-то пробовал, но это не удалось:

myFold="~/Files/Scripts/Main"
cd myFold

bash: cd: myFold: No such file or directory

Как мне заставить его работать?
Однако cd ~/Files/Scripts/Main работает.

4b9b3361

Ответ 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