Intereting Posts
Как получить информацию об оборудовании и выбрать драйверы для хранения в ядре, скомпилированном из исходного кода? Как сделать двойной backtrack 5 5 и Windows 8? Области уведомлений Ubuntu 10.10, многие значки исчезли, как сетевой менеджер Разбивка идентификаторов rpm для файлов разделяемой библиотеки Удаление теней из окон Metacity journalctl: как предотвратить усечение текста в терминале Как отключить спящий режим на debian7? Фотографии Sync Palm Centro на Linux команда zip нескольких каталогов в отдельные файлы zip Как разрешить директорию, чтобы пользователь мог перечислить содержимое, но не может их прочитать. Почему я случайно теряю фокус из активного окна в KDE? Завершить скрипт с помощью индикатора прогресса zenity ufw загружает слишком много вещей, как я могу отключить это? Как перебрать каталоги и очистить скрипт bash проверка данных в столбцах, когда данные или некоторые могут отсутствовать или присутствовать?

chdir (<каталог>) не меняет каталог после выхода в оболочку

Я хотел сделать простую программу на языке C чтобы перейти к моей директории проекта. Его содержание выглядит следующим образом:

 #include <unistd.h> int main() { chdir("/home/enedil/projects/algo"); return 0; } 

Я скомпилировал его с помощью следующей команды ( pro.c – это имя файла):

 gcc pro.c -o /usr/local/bin/pro 

Ошибок и предупреждений не было. Но когда я запускаю его, он не меняет каталог. Зачем?

Ваша программа делает именно то, что вы говорите: он меняет рабочий каталог для себя /home/enedil/projects/algo . Но как только он выйдет, рабочий каталог оболочки будет восстановлен.

Я предполагаю, что вы хотите изменить рабочий каталог родительского процесса, то есть оболочку, не прибегая к простому cd . Есть метод , но, как говорит его автор, не делайте этого.

Текущий рабочий каталог является локальным для процесса. Итак, вы не хотите.

Вы также можете использовать переменную окружения 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 .

Чтобы сделать это для оболочки, используйте команду source (aliased to . ). Он будет запускать приложение в контексте текущей оболочки, а не создавать новый контекст оболочки. Так вы можете также установить переменные среды. Если вы заметили все сценарии запуска в /etc/rc.d или /etc/init.d , вы увидите множество сценариев, которые включены в другие скрипты с помощью команды

 . /etc/init.d/rcvars 

. вызывает сценарий /etc/init.d/rcvars так что все, что оно меняет, сохраняется в текущей среде.