The UNIX and Linux Forums  
Olá e boas-vindas de Estados Unidos para o UNIX e Linux Forum! Obrigado por visitar e fazer parte da nossa comunidade global.

Go Back   O UNIX e Linux Forum > Top Fóruns > Programação Shell Script e
.
google unix.com



Programação Shell Script e Post perguntas sobre ksh, CSH, SH, BASH, Perl, PHP, SED, Awk e outros scripts shell e shell scripts línguas aqui.

Mais UNIX e Linux Fórum Tópicos Você pode achar Helpfull
Fio Thread Starter Fórum Respostas Última postagem
Chamando um script perl de um script perl new2ss Programação Shell Script e 6 05-24-2009 05:03
para matar um processo em perl gurukottur Programação Shell Script e 2 11-20-2006 04:01
Minha "Pão e Manteiga" Processo de manter viva Perl .... Neo Dicas e Tutoriais 0 01-08-2005 05:17
PERL: esperar para um processo para completar dangral Programação Shell Script e 2 04-21-2004 03:37
Matar um processo de script perl. sharuvman Programação Shell Script e 3 04-01-2004 12:10

Closed Thread
English Japanese Spanish French German Portuguese Italian Dutch Swedish Russian Norwegian Hungarian Hebrew Danish Bulgarian Greek Powered by Powered by Google
 
Linkback Thread Tools Pesquisar este Thread Rate Thread Display Modes
  #1 (permalink)  
Old 12-07-2005
vino's Avatar
vino vino is online now Forum Staff  
Apoiante (in vino veritas)
  
 

Join Date: Feb 2005
Local: Bangalore, Índia
Mensagens: 2.797
Perl: Executar script perl no atual processo

Tenho uma pergunta sobre funcionamento perl no atual processo.

Vou demonstrar com um exemplo.

Olhe para isto.

Código:
sh-2.05b$ pwd
/tmp
sh-2.05b$ cat test.sh
#! /bin/sh
cd /etc
sh-2.05b$ ./test.sh 
sh-2.05b$ pwd
/tmp
sh-2.05b$ . ./test.sh 
sh-2.05b$ pwd
/etc
sh-2.05b$
Assim, invocando . / test.sh desova uma sub-shell e executa o script. Considerando que . . / test.sh irá executar o script no actual reservatório.

Agora, como posso simular o comportamento deste último com uma perl script. Tentei o seguinte mas não ajuda.

Código:
sh-2.05b$ pwd
/tmp
sh-2.05b$ cat test.pl
#! /usr/bin/perl
chdir("/etc");
sh-2.05b$ ./test.pl 
sh-2.05b$ pwd
/tmp
sh-2.05b$ . ./test.pl 
sh: ./test.pl: line 2: syntax error near unexpected token `"/tmp"'
sh: ./test.pl: line 2: `chdir("/tmp");'
sh-2.05b$
Existe alguma outra maneira de executar o script para se certificar de que as alterações feitas pelo script irá afectar o actual processo?

Obrigado,
Vino
  #2 (permalink)  
Old 12-07-2005
jim McNAMARA jim mcnamara is offline Forum Staff  
...@...
  
 

Join Date: Feb 2004
Localização: NM
Mensagens: 5.728
AFAIK perl cria sempre uma criança.

Existe algum motivo você não pode ler o script e outros fazer aquilo que faz, no contexto do actual processo? ie., encontrar o Chdir e então fazer aquilo que faz no seu perl script?
  #3 (permalink)  
Old 12-07-2005
vino's Avatar
vino vino is online now Forum Staff  
Apoiante (in vino veritas)
  
 

Join Date: Feb 2005
Local: Bangalore, Índia
Mensagens: 2.797
Citação:
Originally Posted by jim McNAMARA
Existe algum motivo você não pode ler o script e outros fazer aquilo que faz, no contexto do actual processo?
Sim, ele pode ser feito dessa maneira. Isso poderia funcionar.

Estou curioso para saber se ele pode ser feito desta forma.

Obrigado,
vino
  #4 (permalink)  
Old 12-07-2005
açambarcador grasper is offline
Usuário
  
 

Join Date: Sep 2005
Lugares: 45
Apenas um palpite, mas acho que o. comando está instruindo o atual reservatório para interpretar o script - que não pode porque tem perl comandos / funções no mesmo.
  #5 (permalink)  
Old 12-07-2005
cbkihong cbkihong is offline Forum Advisor  
Orientador
  
 

Join Date: Sep 2002
Localização: Hong Kong, China
Posts: 1.624
O "exec" BUILTIN no bash (sh no Linux parece ser demasiado) irá executar o perl processo sem a criação de um novo processo, substituindo o original casca processo, tal como o C exec * família de funções.

Então você deve ser capaz de executar um script por ". / Script.sh" para criar um novo processo e, em seguida, "exec perl script.pl "para continuar a execução sem a introdução de um novo processo, mas o original script irá denunciar (controle não irá voltar para o shell script).

Última edição por cbkihong; em 12/07/2005 08:52..
  #6 (permalink)  
Old 12-07-2005
zazzybob's Avatar
zazzybob zazzybob is offline Forum Advisor  
Registrado Geek
  
 

Join Data: dezembro 2003
Localização: Melbourne, Austrália
Posts: 2.100
Citação:
Originally Posted by cbkihong
O "exec" BUILTIN no bash (sh no Linux parece ser demasiado ).....
Na maioria dos (recentes) distribuições Linux sh é mole / dura ligada ao bash ...
Código:
# ls -l /bin/sh /bin/bash
-rwxr-xr-x  1 root root 616312 Dec  7  2004 /bin/bash
lrwxrwxrwx  1 root root      4 May 18  2005 /bin/sh -> bash
  #7 (permalink)  
Old 12-08-2005
vino's Avatar
vino vino is online now Forum Staff  
Apoiante (in vino veritas)
  
 

Join Date: Feb 2005
Local: Bangalore, Índia
Mensagens: 2.797
Citação:
Originally Posted by cbkihong
O "exec" BUILTIN no bash (sh no Linux parece ser demasiado) irá executar o perl processo sem a criação de um novo processo, substituindo o original casca processo, tal como o C exec * família de funções.

Então você deve ser capaz de executar um script por ". / Script.sh" para criar um novo processo e, em seguida, "exec perl script.pl "para continuar a execução sem a introdução de um novo processo, mas o original script irá denunciar (controle não irá voltar para o shell script).
Hmm ... okie. Então eu usei exec. Isto é o que eu tenho.

Código:
sh-2.05b$ pwd
/tmp
sh-2.05b$ cat test.sh
#! /bin/sh
exec perl /tmp/test.pl
sh-2.05b$ cat test.pl
chdir("/etc");
sh-2.05b$ ./test.sh
sh-2.05b$ pwd
/tmp
sh-2.05b$
Eu fiz uma . . / test.sh e minha janela xterm sumiu.

Mudei test.pl para conter

Código:
#! usr/bin/perl
chdir("/etc");
e para test.sh
Código:
#! /bin/sh
exec /tmp/test.pl
A mostra ainda pwd / tmp.

vino
Closed Thread

Marcadores

Tags
linux

Thread Tools Pesquisar este Thread
Pesquisar este Thread:

Pesquisa Avançada
Display Modes Esta taxa Thread
Esta taxa Thread:

Destacamento Regimento
Você não pode postar novas threads
Você não pode postar respostas
Você não pode postar anexos
Você não pode editar suas postagens

BB code é Ligado
Smilies são Ligado
[IMG] código é Ligado
Código HTML é Desligado
Trackbacks são Ligado
Pingbacks são Ligado
Refbacks são Ligado




Todos os horários são GMT -4. A hora é agora 04:07.


Powered by: vBulletinCopyright © 2000 - 2006, Jelsoft Enterprises Limited. Língua Traduções Powered by .
vBCredits v1.4 Copyright © 2007 - 2008, PixelFX Studios
O UNIX e Linux Fóruns Content Copyright © 1993-2009. Todos os Direitos Reserved.Ad Gestão por RedTyger

Content Relevant URLs por vBSEO 3.2.0