[Cascavel-pm] Função system não executa o comando.
Luis Motta Campos
luismottacampos em yahoo.co.uk
Sexta Janeiro 18 08:05:12 PST 2008
Rafael Lebrao Martins wrote:
> Bom dia, pessoal. Estou com um problema, a função system não está
> funcionando nos meus códigos.. Coloquei em um código a linha abaixo:
>
> system (`chmod 777 -R /var/imm/chats`);
AAAAAAHHHHH!!!!
> Mas quando acesso a o caminho "/var/imm/chats", as permissões
> continuam as mesmas... Alguém pode me ajudar?
Meu caro, teu caso é quase de camisa-de-força e umas férias de uns 5
anos no manicômio mais próximo ;) , mas eu vou tentar te colocar na
linha. Vamos aos comentários...
1. Permissões:
Certifique-se de que você pode executar o mesmo comando, com o mesmo
usuário, à mão.
Me envie o resultado de "ls -l /var/imm/chats"
2. Onde está o teu código? Eu vejo montes de erros nesta linha. Tantos
que meus olhos estão até ardendo... :(
2.1. Erro de conceito: nunca use permissões "777". Você não sabe o que
está fazendo.
2.2. Erro de programação: backticks (ou "crase") são operadores no perl.
Nunca use para quotar strings no programa. Se você não sabe para que
serve, não use - é perigoso.
2.3. Se você está construindo um programa, pretende rodar isso com
frequência. Isso é um erro de conceito, você deveria configurar seus
programas e sistema para permitir acesso apenas aos sistemas / programas
que precisam de acesso, não construir um programa para abrir acesso
irrestrito para alguma coisa.
2.4. usar "system()" sem conferir erros.
2.5. usar o operador de execução no shell (qx//, ou "`" - veja "perlop",
secção "Regexp Quote-Like Operators") e passar o resultado para um
"system()" - ou você é ninja, e podia estar me ensinando alguma coisa,
ou você não faz idéia do que está fazendo. CUIDADO!
3. Sugestão: RTFM, e implementa mais ou menos assim, que deve ser
seguro. ATENÇÃO: eu não testei isso, use por sua conta e risco.
#!/usr/bin/perl
use warnings;
use strict;
my @args = ( q{/usr/bin/chmod}, q{0777}, q{-R}, q{/var/imms/chats} );
system(@args) == 0
or die "system @args failed: $?";
if ( $? == -1 ) {
print "failed to execute: $!\n";
}
elsif ( $? & 127 ) {
printf qq{child died with signal %d, %s coredump\n}, ( $? & 127 ),
( $? & 128 ) ? 'with' : 'whitout';
}
else {
printf "child exited with value %d\n", $? >> 8;
}
__END__
Espero que isso ajude.
Se você tiver mais perguntas, eu estou à disposição.
Putamplexos!
--
Luis Motta Campos (a.k.a. Monsieur Champs) is a software engineer,
Perl fanatic evangelist, and amateur {cook, photographer}
Mais detalhes sobre a lista de discussão Cascavel-pm