Para fazer um patch manualmente, devo digitar este comando
sudo ./playback_delete_data_patch.sh 09_delete_old_data_p.sql
Há um espaço logo antes do 09:
sudo ./playback_delete_data_patch.sh [space] 09_delete_old_data_p.sql
Como posso executar isso dentro de um script?
Existem também vários outros comandos, mas este está causando problemas.
sudo
senha - o script não poderá ser executado completamente se alguém não estiver lá para inseri-lo.sudoers
configuração. Nada demais. Só precisa de conserto.Respostas:
Raramente é uma boa ideia ter
sudo
scripts internos. Em vez disso, remova osudo
do script e execute o próprio script comsudo
:Dessa forma, todos os comandos no script serão executados com privilégios de root e você só precisará fornecer a senha uma vez ao iniciar o script. Se você precisar que um comando específico dentro do script seja executado sem
sudo
privilégios, poderá executá-lo como um usuário comum com (obrigado Lie Ryan ):O espaço é irrelevante, não deve afetar nada, sempre há um espaço entre um comando e seus argumentos.
fonte
sudo
chamadas explícitas no script, porque elevar todo o script para root pode ser uma péssima idéia se houver apenas algumas ações estreitas que precisam de root. Nesse contexto, respondi especificamente ao seu comentário: "Em grande parte porque isso significa que você não pode executar o script automaticamente, pois precisará digitar a senha sempre que for solicitado".Você pode modificar o
sudoers
arquivo.Corra
sudo visudo
.Adicione uma entrada para o seu nome de usuário e o script que você deseja executar sem que seja solicitada uma senha.
fonte
sudoers
arquivo.Você pode tentar algo como:
Essa não é a coisa mais segura a ser feita, pois você está escrevendo uma senha do sudoer em texto sem formatação. Para torná-lo um pouco mais seguro, você pode criar uma variável e ler a senha do sudo na variável e, em seguida, executar o comando como:
Além disso, se você não se importa de todos os seus comandos serem executados como root, você pode simplesmente executar seu script usando
sudo
, como sugerido anteriormente.fonte
read -s PASSWORD
Essa resposta é semelhante à resposta de Terdon . Eu também sugeriria a execução do script principal
sudo
para que o script possa ser executado sem precisar solicitar a senha do usuário durante sua execução.No entanto, caso você queira descartar privilégios de root em alguns dos comandos e executá-los como o usuário real com quem o comando foi chamado
sudo
, você pode verificar se a$SUDO_USER
variável está configurada para descobrir o usuário original.Este é um exemplo de script de como você pode conseguir isso:
fonte
Na verdade, existe uma maneira muito mais simples de fazer isso. Para portabilidade, esta é minha implementação, mas fique à vontade para manipulá-la para atender às suas necessidades.
Digite sua senha do sudo como parâmetro ao iniciar o script, capture-o e faça eco com cada comando que solicitará a senha do sudo.
Você pode adicionar um prompt e capturar após o script ser iniciado da seguinte maneira:
Mas se alguém monitorar o que é executado no nó; tem acesso aos logs criados por ele; ou está apenas examinando o seu deveria aleatoriamente quando você executa um teste, o que pode comprometer a segurança.
Isso também funciona com comandos / scripts em execução que requerem um sim para continuar:
O eco é uma resposta a um prompt, para que você possa usar tudo o que for necessário, se estiver executando outros scripts que solicitam progresso, em ordem seqüencial. Certifique-se de que você sabe que essa ordem pode acontecer ou coisas ruins.
fonte
read
: ryanstutorials.net/bash-scripting-tutorial/bash-input.php Isso deve evitar esse problemafonte
Você pode tentar adicionar o usuário que executa o script ao arquivo sudoers:
fonte