Редактировать:
Это предполагает, что вы сначала установили версию, например:
sudo apt install gcc-4.9 g++-4.9
Оригинал:
А вот для тех, кто ленив, есть одна строчка, просто поменяйте номер в конце на нужную вам версию. Это внесет изменения для gcc и / или g ++
ls -la /usr/bin/ | grep -oP "[\S]*(gcc|g\+\+)(-[a-z]+)*[\s]" | xargs bash -c 'for link in ${@:1}; do sudo ln -s -f "/usr/bin/${link}-${0}" "/usr/bin/${link}"; done' 4.9
В этом примере я перешел на 4,9
В этом примере нет проверок на ошибки, а что нет, поэтому вы можете проверить, что будет запущено, прежде чем запускать его. Просто добавьте эхо перед sudo . Для полноты картины я также предоставлю строку проверки:
ls -la /usr/bin/ | grep -oP "[\S]*(gcc|g\+\+)(-[a-z]+)*[\s]" | xargs bash -c 'for link in ${@:1}; do echo sudo ln -s -f "/usr/bin/${link}-${0}" "/usr/bin/${link}"; done' 4.9
Результат проверки должен быть примерно таким:
sudo ln -s -f /usr/bin/g++-4.9 /usr/bin/g++
sudo ln -s -f /usr/bin/gcc-4.9 /usr/bin/gcc
sudo ln -s -f /usr/bin/gcc-ar-4.9 /usr/bin/gcc-ar
sudo ln -s -f /usr/bin/gcc-nm-4.9 /usr/bin/gcc-nm
sudo ln -s -f /usr/bin/gcc-ranlib-4.9 /usr/bin/gcc-ranlib
sudo ln -s -f /usr/bin/x86_64-linux-gnu-g++-4.9 /usr/bin/x86_64-linux-gnu-g++
sudo ln -s -f /usr/bin/x86_64-linux-gnu-gcc-4.9 /usr/bin/x86_64-linux-gnu-gcc
sudo ln -s -f /usr/bin/x86_64-linux-gnu-gcc-ar-4.9 /usr/bin/x86_64-linux-gnu-gcc-ar
sudo ln -s -f /usr/bin/x86_64-linux-gnu-gcc-nm-4.9 /usr/bin/x86_64-linux-gnu-gcc-nm
sudo ln -s -f /usr/bin/x86_64-linux-gnu-gcc-ranlib-4.9 /usr/bin/x86_64-linux-gnu-gcc-ranlib
Вы можете проверить версию после:
gcc --version
Полу подробное объяснение:
- ls -la / usr / bin / выводит список всех файлов в / usr / bin
- | передать (отправить) вывод следующей команде
- grep -oP соответствует регулярному выражению поиска в строке. o показывает только результат, а не всю совпавшую строку. P говорит grep использовать perl-regex. Я не буду вдаваться в регулярные выражения, читайте об этом, если хотите.
- Проще говоря, xargs собирает результаты, которые передаются на него, и отправляет их все до конца. т.е. команде, следующей за xargs
- Баш ну, это баш. С флагом говорит его использовать строку в качестве команды. В этом примере он перебирает аргументы, отправленные из xargs , пропуская первый (0-й) аргумент, в этом случае цикл пропускает 4.9 . 0-й аргумент используется в цикле для изменения ссылки.
- пер -s -f s флаг имеет символическую ссылку, ф сил удалить связь первым , если это необходимо.