Вы могли бы хотеть попробовать это:
ls *s?([123])r* *s19r*
У меня есть каталог со следующими файлами:
% ls | column
s10r s12r s14r s16r s18r s1r s2r s4r s6r s8r
s11r s13r s15r s17r s19r s23r s3r s5r s7r s9r
Используя вышеупомянутое упомянутый ls:
% ls *s?([123])r* *s19r*
s19r s1r s2r s3r
См. руководство удара по сопоставлению с образцом для получения дополнительной информации.
Ваша программа делает именно то, что вы ей приказываете: она меняет рабочий каталог для самого себя на /home/enedil/projects/algo
. Но как только он выходит, рабочий каталог оболочки восстанавливается.
Полагаю, что вы хотите добиться изменения рабочего каталога родительского процесса, т.е. оболочки, не прибегая к простому cd
. Есть метод , но как говорит его автор: не делайте этого.
Текущая рабочая директория локальна для процесса. Поэтому то, что вы хотите, невозможно.
Для этого для оболочки используйте команду source
(псевдоним на ).
). Она запустит приложение в контексте текущей оболочки вместо создания нового контекста оболочки. Так же вы можете установить переменные окружения. Если вы заметите все сценарии запуска в /etc/rc.d
или /etc/init.d
, вы увидите множество сценариев, которые включены в другие сценарии командой
. /etc/init.d/rcvars
The .
вызывает сценарий /etc/init.d/rcvars
, так что все, что он изменяет, остается в текущем окружении.
Вы также можете использовать переменную окружения CDPATH
. Как объясняется в man bash
:
CDPATH The search path for the cd command. This is a colon-separated
list of directories in which the shell looks for destination
directories specified by the cd command. A sample value is
".:~:/usr".
Так, например, вы можете добавить эту строку в свой ~ / .profile
:
CDPATH=~/projects
Теперь вы можете запускать cd projects
из любого каталога и перейдите в ~ / projects
.