Что является причиной всех этих строк «объявлять -x…», когда я открываю терминал?

15

Когда я открываю терминал на моей машине Fedora (или в ssh), я получаю несколько строк, подобных этой, перед приглашением:

declare -x CVS_RSH="ssh"
declare -x DISPLAY="localhost:10.0"
declare -x G_BROKEN_FILENAMES="1"
declare -x HISTSIZE="1000"
…

Чем это вызвано? Это могло произойти после того, как я отредактировал свой .bashrc, но я верю, что все, что я изменил, это добавление другого пути к каталогу в «PATH =».

Обновление (в ответ на ответ хэвида ): я grep'ed ~/.bashrc, ~/.bash_profileа /etc/bashrcдля «объявить» и ничего не нашел.

Я посмотрел, /etc/bashrcпотому что ~/.bashrcсодержит следующее:

if [ -f /etc/bashrc ]; then
        . /etc/bashrc
fi

Я не вижу ничего в скриптах ~/.bashrcили, ~/.bash_profileкроме приведенного выше кода, «PATH =…», «export…» и «alias…».

Когда я запускаю свой .bashrcсценарий (используя « bash ~/.bashrc») или .bash_profileсценарий, я вижу список «объявляет», но нет сообщений об ошибках. (Я ничего не вижу, если я бегу /etc/bashrc.)

~./bash_profile очень просто:

# .bash_profile

# Get the aliases and functions
if [ -f ~/.bashrc ]; then
        . ~/.bashrc
fi

# User specific environment and startup programs

PATH=$PATH:$HOME/bin

export PATH

Решено : Спасибо andrew.n , ваше предложение помогло мне отследить его. Оказывается, что все эти строки "Declare -x ..." выводятся, если он запускается export(сам по себе), и я случайно вставил CR между "export" и "PATH = ..." в моем .bashrc.

Дэрил Спитцер
источник
посмотрите в /etc/profile.d/
freiheit
Что я должен искать в /etc/profile.d/? Что это за файлы? (Возможно, я должен создать новый вопрос об этом.)
Дэрил Спитцер
Благодарю. В моем случае это был CR между экспортом и PATH тоже :)
marlar

Ответы:

8

Бегать

env - HOME="$HOME" /bin/bash --login -xv 2>&1 | tee foo

запустить bash в подробном режиме. Это напечатает каждую строку файла инициализации, когда он читается, и каждую строку файла инициализации, когда он выполняется, копируя выходные данные в файл с именем foo. Тогда вы можете заглянуть внутрь, fooчтобы увидеть, что вызывает declare -xвызов.

andrew.n
источник
6

Выяснилось, что множество declare ...утверждений является результатом того, что exportони выполняются где-то без аргументов.

Я обнаружил случайный перевод строки в моем .bashrc:

export
VARIABLE=value

Который должен был быть

export VARIABLE=value
jgeewax
источник
Да. Это правильный ответ. Если вы введете «export» самостоятельно в своем терминале, вы увидите тот же вывод объявления -x.
Стерлинг Борн
Да, это относится ко мне! Я случайно поместил содержание экспорта в следующую новую строку. Я поставил их в одну строку, и это работает.
фанчина
3

Да, вероятно, это исходит от вашего .bashrc, потому что вы его отредактировали. Возможно, вы ввели в скрипт синтаксическую ошибку, которая может привести к ее выводу.

Вы можете убедиться, что эти строки существуют в вашем .bashrc, набрав:

grep declare ~/.bashrc

Вы должны увидеть как минимум те 4 строки, которые выводятся на консоль. Вы также можете попробовать запустить скрипт .bashrc из командной строки и посмотреть, нет ли ошибок:

bash ~/.bashrc
heavyd
источник