usando aqui o redirecionamento de E / S do script com o comando su

2

aqui está o meu script. Quero fazer login com outro usuário e fazer ls -lih :

#!/bin/bash

su - testuser <<- _EOF_
    123456 #password
    _EOF_

ls -lih

aqui está a saída quando eu corri o script:

./script.sh
-bash: line 1: 123456: command not found
total 127M
 262210 drwxr-xr-x.  9 mazimi mazimi 156K Feb 14 19:05 Desktop
 262211 drwxr-xr-x.  2 mazimi mazimi  36K Feb 14 18:26 Downloads
 278106 -rw-r--r--   1 mazimi mazimi  64K Feb 14 22:30 ems.cfg
 ... # list of files

O ls -lih no meu diretório pessoal não é testuser ? Como devo corrigir isso?

    
por Majid Azimi 14.02.2012 / 20:06

3 respostas

6

Existem vários problemas com o seu código.

  1. su lê a senha de /dev/tty , não de stdin , então você não pode redirecionar a senha assim. De fato, o que su faz por padrão é iniciar um shell como o usuário de destino, portanto, se você executar isso como root :

    su - testuser <<- _EOF_
    123456 #password
    _EOF_
    

    O su será bem-sucedido (a raiz não precisa de uma senha para fazer isso), mas o 123456 será passado como entrada para o shell do usuário, e é por isso que quando você executa seu script:

    -bash: line 1: 123456: command not found
    

    Se você quiser fazer isso como um usuário não-root, provavelmente deve seguir o conselho de bahamt e usar sudo , que pode ser configurado para oferecer acesso sem senha a comandos específicos como um usuário diferente.

  2. Mesmo se o su funcionar, ele gera um novo processo. O comando su saiu (e retornou para a conta original) antes do comando ls ser executado. Então o que você realmente quer é:

    su - testuser <<EOF
    ls -lih
    EOF
    
por 14.02.2012 / 22:36
1

Acho que você descobrirá que não pode consertar. Acho que su/dev/tty para a senha e acredito que você não pode realmente redirecionar para esse arquivo de dispositivo mágico.

Se você estiver usando o linux, poderá verificar o que su lê para a senha com strace .

    
por 14.02.2012 / 20:22
1

O que você realmente quer usar é sudo .

Você pode querer começar aqui .

    
por 14.02.2012 / 20:49

Tags