O comando Sudo no script bash interrompe o script

1

Eu tenho um iMac no começo de 2009 com um problema no sensor. Os ventiladores ODD e CPU são executados a toda velocidade. Para reduzi-los à velocidade mínima no Ubuntu, preciso definir as velocidades no Terminal, usando este método . Em vez de fazer isso após cada inicialização, eu fiz um script bash para fazer isso por mim, mas não funciona.

Este é o meu script:

#!/bin/bash
echo "Beginning script..."
echo "Logging in as root..."
sudo su
cd /sys/devices/platform/applesmc.768/
echo "Enabling manual override for Fan 1 (ODD fan)..."
echo '1' > fan1_manual
echo "Setting speed of Fan 1 (ODD fan) to 1650 RPM..."
echo '1650' > fan1_output
echo "Enabling manual override for Fan 3 (CPU fan)..."
echo '1' > fan3_manual
echo "Setting speed of Fan 3 (CPU fan) to 1200 RPM..."
echo '1200' > fan3_output
echo "Done."

O problema está em "sudo su". Ele solicita uma senha, mas depois de digitar a senha, nada acontece. Apenas pára.

Aqui está uma captura de tela

    
por poiihy 20.01.2015 / 05:57

3 respostas

3

Seu script é interrompido porque sudo su inicia um novo processo de shell. Seu processo shell original - aquele que está executando o script - está aguardando o sub-shell terminar.

Eu proponho executar um script inteiro com privilégios de root em vez de pedir para fazer login como root no próprio script. Remova sudo su parte do seu código e execute o script assim:

$ sudo ./yourscript

Esta é uma prática comum. Observe que os scripts de administração do sistema, como por exemplo update-grub , não solicitam senha de root - eles devem ser executados como root.

    
por user280493 20.01.2015 / 06:10
4

Você pode simplesmente remover as coisas interativas e copiar as linhas para /etc/rc.local entre as # Por padrão, esse script não faz nada. e as linhas de saída 0

sudo nano /etc/rc.local

Insira o script editado.

cd /sys/devices/platform/applesmc.768/
echo "Enabling manual override for Fan 1 (ODD fan)..."
echo '1' > fan1_manual
echo "Setting speed of Fan 1 (ODD fan) to 1650 RPM..."
echo '1650' > fan1_output
echo "Enabling manual override for Fan 3 (CPU fan)..."
echo '1' > fan3_manual
echo "Setting speed of Fan 3 (CPU fan) to 1200 RPM..."
echo '1200' > fan3_output

Ctl Enter Irá salvar o arquivo

Ctl x Irá sair do nano

Dessa forma, ele será executado quando você inicializar.

    
por Scott Goodgame 20.01.2015 / 06:12
0

O comando sudo su cria uma nova sessão de shell. Está esperando por você para digitar seus comandos. É NÃO vai executar os comandos depois dessa linha.

Você tem duas opções:

1) Extraia os comandos após sudo su em um script separado e execute isso com sudo

2) altere as linhas como echo '1' > fan1_manual para echo '1' | sudo tee fan1_manual

    
por sмurf 20.01.2015 / 06:10