Editar:
Esto supone que ha instalado la versión primero, por ejemplo, con:
sudo apt install gcc-4.9 g++-4.9
Original:
Y aquí hay una frase para aquellos que son flojos, solo cambie, cambie el número al final a la versión que desee. Hará el cambio para gcc y / o 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
En este ejemplo, cambié a 4.9
No hay comprobaciones de errores y qué no en este ejemplo, por lo que es posible que desee comprobar qué se ejecutará antes de ejecutarlo. Solo agrega echo antes de sudo . Para completar, también proporciono una línea de verificación:
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
El resultado de la verificación debería ser algo como:
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
Puede verificar la versión después con:
gcc --version
Explicación semi detallada:
- ls -la / usr / bin / enumera todos los archivos en / usr / bin
- El | canalizar (enviar) la salida al siguiente comando
- grep -oP coincide con la expresión regular de búsqueda por línea. o solo muestra el resultado, no toda la línea coincidente. P le dice a grep que use perl-regex. No entraré en regex aquí, léelo si quieres.
- En pocas palabras, xargs reúne los resultados que se le envían y los envía al final. es decir, al comando siguiente xargs
- Bash bien, es bash. La bandera c le dice que use la cadena como un comando. En este ejemplo, recorre los argumentos enviados desde xargs omitiendo el primer argumento (0º), en este caso el bucle omite 4.9 . El argumento 0 se usa en el bucle para cambiar el enlace.
- ln -s -f La bandera s hace un enlace simbólico, f fuerza el desvío primero si es necesario.