Ваши проблемы с .bashrc
не связаны. .profile
должен быть совместим со всеми sh
-совместимыми оболочками, тогда как, конечно, .bashrc
специфичен для Bash и, как правило, не должен использоваться другими оболочками.
Как правило, помещайте материалы, которыми вы хотите поделиться между оболочками, в .profile
и убедитесь, что вы используете исходные файлы из файлов запуска других ваших оболочек (если, конечно, они уже делают это по умолчанию).
Очевидно, вам нужно избегать кода, который ведет себя по-разному в разных оболочках (например, отсутствие цитирования - это нормально для Zsh, но проблема в правильно совместимых с Bourne оболочках).
Что касается части вашего вопроса «почему», это значит, что настройки в вашем .profile
доступны для программ, которые вы запускаете из сеанса графического интерфейса, а не только для тех, которые вы запускаете из оболочка (или, может быть, нам следует сказать «традиционная» оболочка и рассматривать сеанс графического интерфейса пользователя как «нетрадиционную» оболочку).
В Macintosh каналы обрабатываются так же, как и сокеты, с помощью функции read
. Это поведение вызвано тем, что вы пытаетесь read
файл select_test_tmp.fifo
, и он блокируется всякий раз, когда у вас есть пустой ввод. EOF по умолчанию записывается в канал после каждой операции записи.
Один из способов проверить это — запустить cat select_test_tmp.fifo
из командной строки. Он будет ждать, пока не получит какой-либо ввод, прежде чем возвратить --, если вы не завершите его первым.