Эта команда :"..bashrc" приводила к :"-bash :/usr/bin/whoami :Слишком длинный список аргументов" всякий раз, когда я пытался выполнить любую команду

Кажется, это не работает. можно спросить здесь:форум xfce Но я думаю, что это ошибка, и вы можете сообщить об этом здесь:ошибка xfce

1
06.05.2021, 01:24
2 ответа

..bashrcзапустит содержимое .bashrcв текущей оболочке. Обычно вам не нужно этого делать, поскольку .bashrcсчитывается оболочкой при ее запуске, но если вы вносите в нее изменения и хотите перезагрузить их, вы можете это сделать.

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


То, что у вас там в .bashrc, несколько странно, хотя:

export PATH=$PATH:$HOME/.local/bin:$HOME/bin/prog1:$PATH
            ^^^^^                                  ^^^^^

Обратите внимание, как вы помещаете старый $PATHв начало и конец нового PATHпять раз. По моим подсчетам, это поместит оригинал $PATH32 раза. Это не так уж плохо, но если это было сделано при запуске оболочки, ваш $PATHтеперь будет состоять из нескольких тысяч символов, и если вы затем сделаете то же самое снова, он может оказаться намного длиннее 100 КБ. Начиная с моего $PATHиз 74 символов, выполнение этих назначений дважды дает строку размером 172 КБ.

И это может быть проблемой. :Linux имеет ограничение в 128 КБ на длину одного аргумента командной строки (в дополнение к ограничению на всю партию ). Переменные среды и аргументы командной строки передаются аналогичным образом в execve(), поэтому предположительно одно и то же ограничение применяется к обоим, и, следовательно, PATH.

6
28.07.2021, 11:34

Замените первый набор строк exportэтим

export PATH="$PATH:$HOME/.local/bin:$HOME/bin"
[[ -d "$HOME/bin/prog1" ]] && PATH="$PATH:$HOME/bin/prog1"
[[ -d "$HOME/bin/prog2" ]] && PATH="$PATH:$HOME/bin/prog2"
[[ -d "$HOME/prog2" ]] && PATH="$PATH:$HOME/prog2"
[[ -d "$HOME/prog2/bin" ]] && PATH="$PATH:$HOME/prog2/bin"
[[ -d "$HOME/bin/prog3/tools/newtool" ]] && PATH="$PATH:$HOME/bin/prog3/tools/newtool"

Происходило то, что вы удваивали $PATHв каждой строке($PATH+ новый элемент +$PATH). Очень странно.

В этом коде замены каждый раздел [[... ]]гарантирует, что соответствующий каталог существует, прежде чем добавить его в ваш $PATH. Не обязательно, но определенно чище

5
28.07.2021, 11:34

Теги

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