Когда я вхожу, у меня есть эти сообщения:
-bash: $'\r' : command not found
-bash: $'\r' : command not found
-bash: $'\r' : command not found
Совершенно очевидно, что это вызвано окончаниями строк в стиле Windows в некоторых сценариях запуска, поэтому мой вопрос: могу ли я отследить сценарий, который вызывает это и как?
Ответы:
Bash при запуске читает несколько различных файлов, даже в зависимости от того, как он запускается ( описание см. В руководстве ). Тогда есть такие вещи
/etc/profile.d/
, которые непосредственно не читаются оболочкой, но на них можно ссылаться из других файлов запуска во многих дистрибутивах.Тебе придется пройти через все это, но, к счастью, ты можешь просто
grep
вернуться в карету. Попробуйте, например, что-то вроде:См. Также Можно ли узнать, какие файлы устанавливаются / добавляются в переменные среды, и каков их приоритет? по аналогичной проблеме.
источник
~/.bash_aliases
strace -e open your-shell
, от ответа Stephane над здесьfile (1) может быть полезен и здесь.
Я вижу, что
signup
нужно удалить эти надоедливые окончания строк Windows CRLF.Для прямой рекурсии, такой как
/home/username
вы, возможно, можно комбинировать сfind
иxargs
(и, может быть, с grep):источник
Другой метод состоит в том, чтобы взять все упомянутые сценарии запуска и отобразить строку, идентифицирующую каждый из них в начале каждого.
Затем при входе в систему вы увидите что-то вроде этого:
На этом этапе вы можете сделать вывод, что (в приведенном выше примере)
.bash_aliases
содержит обидные окончания строки.После того, как вы определили файл, но проблемные строки не выпрыгивают на вас, вы можете использовать тот же метод, чтобы отследить линию. Выведите сообщение наполовину через файл, затем через 3/4 или 1/4 в зависимости от вывода. Таким образом, вы можете отследить линию, в зависимости от того, отражается ли она до или после вашего эха.
источник
Я принимаю сложную часть этого вопроса так: «Как я могу найти возврат каретки в файле?» но "как я могу узнать, какие файлы использует мой bashrc?"
По второму вопросу вы можете попробовать что-то вроде этого:
Это покажет вам все, что делает ваш bashrc, включая все файлы, на которые он ссылается. Это шумно, но должно помочь вам отследить, какие файлы используются.
За исключением того, что мои (и многие другие)
.bashrc
файлы выходят раньше, если не работают в интерактивном режиме, так что вы должны обманом пройти эту проверку:Здесь действует
-i
интерактивный режим.Чтобы вычленить только случаи, когда вы создаете файл, у меня работает что-то вроде этого, но я не могу обещать, что регулярное выражение перехватывает все:
Я думаю, вы также можете захотеть сообщения об ошибках, так что-то вроде:
Если по какой-либо причине ничего из этого не сработало, я бы прибегнул к
strace -e open bash
чему-то подобному, чтобы найти каждый раз, когда какой-либо файл открывается вашим сеансом bash. Но это еще более тяжелое / шумное решение.источник