The UNIX and Linux Forums  

Go Back   O UNIX e Linux Forum > Top Fóruns > UNIX para Dummies Perguntas & Respostas > Respostas a Perguntas Frequentes > Dicas e Tutoriais
.
google unix.com



Dicas e Tutoriais Helpful artigos de nossos usuários.

Mais UNIX e Linux Fórum Tópicos Você pode achar Helpfull
Fio Thread Starter Fórum Respostas Última postagem
Aprender Oracle FDA: A Beginner's Story iBot Oracle Atualizações (RSS) 0 04-06-2008 06:10
CEP e da História do Peixe iBot Complex Event Processing RSS Notícias 0 12-17-2007 05:50
Bangkok Post Artigo: A história por trás do sistema operacional Linux Neo Notícias, Links, Eventos e Anúncios 0 04-05-2003 10:05

 
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 03-31-2007
Perderabo's Avatar
Perderabo Perderabo is offline Forum Staff  
Unix Daemon
  
 

Join Date: Aug 2001
Localização: Ashburn, Virginia
Mensagens: 9.123
Toda a história sobre #! / usr / bin / ksh

Introdução

Inicialmente, só tinha um shell no Unix. Quando executou um comando, o reservatório seria uma tentativa de invocar do exec () chamadas de sistema sobre ele. É o comando foi um executável, o exec teria sucesso e seria executado o comando. Se o exec () falhou, o reservatório não desista, em vez disso iria tentar interpretar o comando arquivo como se fosse um script. Isso funciona bem, desde que haja apenas um reservatório no sistema. Mas e se você estiver usando um shell como o seu interativos e deseja executar um script escrito em outro reservatório da língua?

Este é o lugar onde o #! truque vem polegadas A idéia de utilizar # para representar um comentário originou com csh rapidamente e foi adicionado ao Bourne Shell. Agora todos sabem reservatórios para ignorar coisas depois de um #. Então, nós podemos adicionar uma linha conduzindo algo como "#! / Usr / bin / ksh". Para o reservatório esta linha é apenas um comentário. Mas, se o kernel tenta executar um arquivo com esta linha, ele irá executar um determinado intérprete e passar o script para ele. Então shell scripts executáveis tornou bastante similar reais são executáveis. Agora, quando um shell tenta executar um script, é bem sucedido.

E se você sair fora do #! linha? Bem, o kernel exec irá falhar. Sua média shell tentará então executar o script em si. A poucos reservatórios tentará inspeccionar o script para tentar adivinhar o idioma. Isto não é bom. Você pode estar executando ksh interativos como seu reservatório e escrita ksh scripts. Se mais tarde mudar para bash como um shell interativo, alguns dos seus scripts podem continuar a correr, enquanto outros podem falhar. Também a linha é um comentário que fornece uma pista importante para um programador que olha para o script para compreendê-lo. Sabendo que língua o autor está tentando usar é uma grande ajuda.

Embora eu tenha usado o termo "casca", na verdade essa técnica pode ser usada com muitos programas que não são conchas. Aqui está um "script" para exibir uma mensagem multiline:
Código:
#! /usr/bin/cat
Line 1
Line 2 
Line 3
Isto irá mostrar que "#! / Usr / bin / cat" linha, mas que não seja, funciona bastante bem.

Passando um Argumento

Você pode passar um único argumento como este:
#! / usr / local / bin /perl -w
Mas, em geral, está limitado a um argumento. Na maioria dos sistemas, uma linha como: "#! / Some / intérprete-a-b" resultará em "-a-b" são passadas como um único argumento. No entanto, o único argumento não se limita a começar com um hífen. Nós podemos melhorar a nossa mensagem script:
Código:
#! /usr/bin/sed 1d
Line 1
Line 2 
Line 3
Exemplo

Vamos colocar todos do presente, juntamente com um exemplo. Aqui está um perl script que vou chamar perlargs:
Código:
#! /usr/local/bin/perl -w

#! /usr/local/bin/perl -w
print "script name is ", $0, "\n";
while (@ARGV) {
        $ARGV = shift @ARGV;
        print "argument ", $i++,  " is ", $ARGV, "\n";
}

system "ps -f -ww";

A pergunta-w perl emissão de mensagens de aviso. O script simplesmente exibe seus argumentos e, em seguida, executa o comando ps. Quando eu executá-lo, eu recebo:
Código:
$ ./perlargs one two three
Name "main::i" used only once: possible typo at ./perlargs line 10.
script name is ./perlargs
argument 0 is one
argument 1 is two
argument 2 is three
                 UID        PID   PPID    STIME TTY     TIME CMD
                 perderabo   69      1 17:47:28 n01  0:00.24 /bin/ksh -l
                 perderabo  201     69 18:28:22 n01  0:00.03 /usr/local/bin/perl -w ./perlargs one two three
                 perderabo 2055    201 18:28:22 n01  0:00.01 ps -f -ww
$
Observe que o perl processo foi chamado com 5 argumentos. O 2 º argumento é o nome do script. Cabe ao perl processo para apresentar os últimos 3 argumentos como o argumento lista visto pelo script. Também comecei a perceber que o kernel perl processo. Depois disso, cabe aos perl para abrir o livro e lê-lo e executar cada linha. Esta é a razão pela qual scripts precisam ser legíveis. Você não pode executar um script não-legível.

Conclusão

Esta informação deverá ser suficiente para entender o que está acontecendo com esses #! linhas. Nos lugares seguintes, vou acrescentar mais pormenores sobre os vários aspectos do processo.
 

Marcadores

Tags
perl, perl turnos, cabana, deslocar, turnos perl

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 06:48.


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