select (2) в FIFO на macOS

Ваши проблемы с .bashrc не связаны. .profile должен быть совместим со всеми sh -совместимыми оболочками, тогда как, конечно, .bashrc специфичен для Bash и, как правило, не должен использоваться другими оболочками.

Как правило, помещайте материалы, которыми вы хотите поделиться между оболочками, в .profile и убедитесь, что вы используете исходные файлы из файлов запуска других ваших оболочек (если, конечно, они уже делают это по умолчанию).

Очевидно, вам нужно избегать кода, который ведет себя по-разному в разных оболочках (например, отсутствие цитирования - это нормально для Zsh, но проблема в правильно совместимых с Bourne оболочках).

Что касается части вашего вопроса «почему», это значит, что настройки в вашем .profile доступны для программ, которые вы запускаете из сеанса графического интерфейса, а не только для тех, которые вы запускаете из оболочка (или, может быть, нам следует сказать «традиционная» оболочка и рассматривать сеанс графического интерфейса пользователя как «нетрадиционную» оболочку).

1
02.08.2017, 09:08
1 ответ

В Macintosh каналы обрабатываются так же, как и сокеты, с помощью функции read. Это поведение вызвано тем, что вы пытаетесь readфайл select_test_tmp.fifo, и он блокируется всякий раз, когда у вас есть пустой ввод. EOF по умолчанию записывается в канал после каждой операции записи.

Один из способов проверить это — запустить cat select_test_tmp.fifoиз командной строки. Он будет ждать, пока не получит какой-либо ввод, прежде чем возвратить --, если вы не завершите его первым.

0
28.01.2020, 00:51

Теги

Похожие вопросы