zsh-users
 help / color / mirror / code / Atom feed
From: Dan Nelson <dnelson@emsphone.com>
To: Ken Lareau <elessar@deepika.squonk.net>
Cc: zsh-users@math.gatech.edu
Subject: Re: /usr/bin/script annoyance
Date: Wed, 16 Sep 1998 11:41:38 -0500	[thread overview]
Message-ID: <19980916114138.A23822@emsphone.com> (raw)
In-Reply-To: <199809161631.MAA06749@mailhost2.squonk.net>; from "Ken Lareau" on Wed Sep 16 12:31:07 GMT 1998

In the last episode (Sep 16), Ken Lareau said:
>> Oh weird.  I just looked at the source to typescript under FreeBSD,
>> and it reads in part:
>>
>>	char *shell;
>>
>>	shell = getenv("SHELL");
>>	if (shell == NULL)
>>		shell = _PATH_BSHELL;
>>
>>	execl(shell, "sh", "-i", NULL);
>>
>> So argv[0] is "sh", and it's entering /bin/sh compatibility mode. 
>> This is almost _exactly_ the problem Paul Lew reported to the zsh
>> list on Aug 11 (mailinglist article archive/latest/4298).  Both Bart
>> Schaefer and zefram posted ugly workarounds :)
> 
> Hmm... I did a 'truss' on the 'script <file>' command and dumped it
> to a file, and here's what I see when it calls the shell:
> 
>   execve("/software/bin/zsh", 0xEFFFF918, 0xEFFFFA60)  argc = 2
> 
> Of course I have no idea what the 2nd and 3rd arguments are to the
> execve command, but it would seem to me that it should start up as a
> regular zsh shell, no?  (Please tell me if I'm missing something
> blatently obvious here.)

The prototype for the execve syscall is usually

execve(const char *path, char *const argv[], char *const envp[])

and the string that determines sh compatibility mode for zsh is not
'path', but 'argv[0]'.  If you were to run script under dbx and break
on the execve call, I'd bet anything that the contents of the string at
0xEFFFF918 is "sh".

Zefram's solution to this problem is the shortest:

> Alternatively, set your SHELL to be the executable of this program:
>
>        extern char **environ;
>        int main(int argc, char **argv)
>        {
>            if(argc != 0)
>                argv[0] = "zsh";
>            execve("/usr/local/bin/zsh", argv, environ);
>            _exit(1);
>        }

That'll guarantee that zsh gets called as "zsh".

	-Dan Nelson
	dnelson@emsphone.com


  reply	other threads:[~1998-09-16 16:51 UTC|newest]

Thread overview: 9+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
1998-09-15 18:47 Simple way to get parent process name? Ken Lareau
1998-09-15 20:13 ` Dan Nelson
1998-09-16 13:09   ` Ken Lareau
1998-09-16 16:08     ` /usr/bin/script annoyance Dan Nelson
1998-09-16 16:31       ` Ken Lareau
1998-09-16 16:41         ` Dan Nelson [this message]
1998-09-16 16:53           ` Ken Lareau
1998-09-16 17:13             ` Ken Lareau
1998-09-16 17:40             ` Bart Schaefer

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=19980916114138.A23822@emsphone.com \
    --to=dnelson@emsphone.com \
    --cc=elessar@deepika.squonk.net \
    --cc=zsh-users@math.gatech.edu \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
Code repositories for project(s) associated with this public inbox

	https://git.vuxu.org/mirror/zsh/

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).