opensuse
[Arriba] [Todas las Listas]

Re: [opensuse] Tipo diferente de pelar guiones

To: opensuse@xxxxxxxxxxxx
Subject: Re: [opensuse] Tipo diferente de pelar guiones
From: David Haller <dnh@xxxxxxxxxxxx>
Date: Thu, 22 Sep 2011 12:10:18 +0200
Delivered-to: opensuse@xxxxxxxxxxxxxxxxxxx
Delivery-date: Thu, 22 Sep 2011 06:12:38 -0400
Envelope-to: traductor@xxxxxxxxxxx
In-reply-to: <4E7AED97.1000309@gmail.com>
List-archive: <http://lists.opensuse.org/opensuse/>
List-help: <mailto:opensuse+help@opensuse.org>
List-owner: <mailto:opensuse+owner@opensuse.org>
List-post: <mailto:opensuse@opensuse.org>
List-subscribe: <mailto:opensuse+subscribe@opensuse.org>
List-unsubscribe: <mailto:opensuse+unsubscribe@opensuse.org>
Mail-followup-to: opensuse@xxxxxxxxxxxx
Mailing-list: contact opensuse+help@xxxxxxxxxxxx; run by mlmmj
Organization: What?
References: <4E7AED97.1000309@gmail.com>
User-agent: Mutt/1.5.21 (2010-09-15)
Hola,

En *Thu, 22 *Sep 2011, George *OLson escribió:
>descargué un programa que necesité del internet y el
>programa de instalación era un archivo de guión con la extensión .*sh. Las
>instrucciones del *developer dijo para correr el guión en una línea
>de orden por escribir la orden:
>
>./<*filename>
>
>Pensé (*mistakenly) que podría correr cualquier pelar guión por escribir
>la orden . <*filename> (Con un espacio entre el punto y el
>*filename). Así que intenté correrlo que manera, y conseguía el error "no puede
>ejecutar *binary archivo".
>
>Aun así, cuándo seguí el *developer instrucciones y escrito dentro
>./<*filename>, el guión ejecutó perfectamente e instalado el
>programa.
>
>Así que mi cuestión es, qué es la diferencia entre correr un archivo
>de guión con el espacio
>
><de punto><de la orden><*filename>, por ejemplo "#> . *myscript.*sh"
>
>Y corriéndolo con punto
>
><><*slash><*filename>, por ejemplo  "#> ./*myscript.*sh"?

La diferencia principal en este contexto es el valor de $0. Cuando otro
escribió, '.' "Fuentes" el guión en la corriente pela, así, $0 estancias
cuando era:

$ eco 'eco $0' | . /*dev/*stdin
*bash

Llamando un guión *via *sh archivo/de CAMINO o archivo de CAMINO/de la marca *executable y entonces
archivo de CAMINO/de la llamada (dónde el CAMINO puede ser '.'), entonces, $0 consigue puesto al
nombre del _*scriptfile_:

$ eco 'eco $0' >/*tmp/*t.*sh
$ *sh /*tmp/*t.*sh
/*tmp/*t.*sh
$ *chmod 700 /*tmp/*t.*sh
$ /*tmp/*t.*sh
/*tmp/*t.*sh

Y, sorpresa de sorpresa, *self-extrayendo *archives (*shar y el gustar)
tiene un pelar-guión en el superior y entonces releído ellos con un
*offset (con *e.*g. *dd) Para extraer el real *archive (normalmente un *tar).

Tan, básicamente lo que aquel guión  es:

    *dd si=$0 *skip=... | *tar *x ...

Y si $0 no es el nombre del guión/*archive pero /cubo/*bash, va
figura.

Qué exactamente causado el error conseguías cuando utilizando '. Archivo' no sé, pero es probablemente para ser un lado-efecto del encima mencionado.

*HTH,
-*dhn

-- 
"Recientemente un amigo me dio un *pornographic vídeo y dijo que me gustaría, pero no sé cómo para mirarlo.  No tengo un *pornograph."
        -- Peter *Moylan en *alt.Uso.*english
-- 
A *unsubscribe, *e-correo: *opensuse+unsubscribe@xxxxxxxxxxxx
Puesto que órdenes adicionales, *e-correo: *opensuse+help@xxxxxxxxxxxx


Hello,

On Thu, 22 Sep 2011, George OLson wrote:
>I downloaded a program that I needed off the internet and the
>installation program was a script file with the extension .sh. The
>instructions from the developer said to run the script on a command
>line by typing the command:
>
>./<filename>
>
>I thought (mistakenly) that I could run any shell script by typing
>the command . <filename> (with a space between the dot and the
>filename). So I tried to run it that way, and I got the error "cannot
>execute binary file".
>
>However, when I followed the developer's instructions and typed in
>./<filename>, the script executed perfectly and installed the
>program.
>
>So my question is, what is the difference between running a script
>file with the command
>
><dot><space><filename>, for example "#> . myscript.sh"
>
>and running it with
>
><dot><slash><filename>, for example  "#> ./myscript.sh"?

The main difference in this context is the value of $0. As other's
wrote, '.' "sources" the script in the current shell, thus, $0 stays
as it were:

$ echo 'echo $0' | . /dev/stdin
bash

Calling a script via sh PATH/file or make PATH/file executable and
then call PATH/file (where PATH may be '.'), then, $0 gets set to the
name of the _scriptfile_:

$ echo 'echo $0' >/tmp/t.sh
$ sh /tmp/t.sh
/tmp/t.sh
$ chmod 700 /tmp/t.sh
$ /tmp/t.sh
/tmp/t.sh

And, surprise surprise, self-extracting archives (shar and the like)
have a shell-script at the top and then reread themselves with an
offset (with e.g. dd) to extract the actual archive (usually a tar).

So, basically what those script do is:

    dd if=$0 skip=... | tar x ...

And if $0 is not the name of the script/archive but /bin/bash, go
figure.

What exactly caused the error you got when using '. file' I don't
know, but it's likely to be a side-effect of the above mentioned.

HTH,
-dhn

-- 
"Recently a friend gave me a pornographic video and said that I'd like
it, but I don't know how to watch it.  I don't have a pornograph."
        -- Peter Moylan in alt.usage.english
-- 
To unsubscribe, e-mail: opensuse+unsubscribe@xxxxxxxxxxxx
For additional commands, e-mail: opensuse+help@xxxxxxxxxxxx


<Anterior por Tema] Tema Actual [Siguiente por Tema>