* Change directory on invocation of zsh @ 2004-10-16 21:39 Michael Prokop 2004-10-17 3:56 ` Bart Schaefer 0 siblings, 1 reply; 5+ messages in thread From: Michael Prokop @ 2004-10-16 21:39 UTC (permalink / raw) To: zsh-users Hello, I'm using the latest zsh version of debian unstable (4.2.1). I'm using rungetty on one of my systems. My /etc/inittab looks like this: 1:12345:respawn:/bin/zsh --login -c "/usr/bin/grml-start ; /usr/bin/grml-screen" >/dev/tty1 2>&1 </dev/tty1 [...] 5:2345:respawn:/sbin/rungetty tty5 -u grml -g grml --autologin grml /bin/zsh So I'm able to use autologin without doing login stuff. My problem: when starting zsh my working directory is '/'. Not just as user root but also as user 'grml'. AFAIK the pam_env module is responsible for doing some basic enviroment handling. Because I don't use the PAM system I've a little wrapper in my zsh config: ,---- [ /etc/zsh/zshrc ] | if [[ -z "$HOME" || "$HOME" == "/" ]] ; then | if [[ `id -un` == "root" ]] ; then | export HOME=/root | else | export HOME=/home/`id -un` | fi | fi `---- Of course running 'cd' or 'cd $HOME' or 'cd ~' changes into my homedirectory. But I'd like to change path already on login. Doing something like '[ $SECONDS == "0" ] && cd $HOME' is a workaround but changes the working directory to $HOME any time I'm starting a new zsh. Am I on the wrong way? Any ideas or any hints? Thanks! thx && regards, (-: Michael ^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: Change directory on invocation of zsh 2004-10-16 21:39 Change directory on invocation of zsh Michael Prokop @ 2004-10-17 3:56 ` Bart Schaefer 2004-10-17 14:45 ` Michael Prokop 0 siblings, 1 reply; 5+ messages in thread From: Bart Schaefer @ 2004-10-17 3:56 UTC (permalink / raw) To: Michael Prokop; +Cc: zsh-users On Sat, 16 Oct 2004, Michael Prokop wrote: > little wrapper in my zsh config: > > ,---- [ /etc/zsh/zshrc ] Why zshrc rather than zshenv? The wrong ~/.zshenv will be loaded if $HOME is not set correctly before the end of the global zshenv. > | if [[ -z "$HOME" || "$HOME" == "/" ]] ; then > | if [[ `id -un` == "root" ]] ; then > | export HOME=/root > | else > | export HOME=/home/`id -un` > | fi > | fi > `---- Using `id -un` there, particularly twice, should not be necessary. E.g., if (( EUID == 0 )); then export HOME=/root else export HOME=/home/$LOGNAME fi > Of course running 'cd' or 'cd $HOME' or 'cd ~' changes into my > homedirectory. But I'd like to change path already on login. So whether HOME is set correctly (before executing the above snippet) has nothing to do with whether the current directory is "/" ? I would expect the two conditions to be related, e.g., if [[ -z "$HOME" || "$HOME" == "/" ]] ; then # ... export $HOME correctly, then ... cd fi Or is there some reason you don't want to have the "cd" in the global config? > Doing something like '[ $SECONDS == "0" ] && cd $HOME' is a > workaround but changes the working directory to $HOME any time I'm > starting a new zsh. Am I on the wrong way? How about something like if [[ -z "$ALREADY_DID_CD_HOME" ]]; then export ALREADY_DID_CD_HOME=$HOME cd fi ^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: Change directory on invocation of zsh 2004-10-17 3:56 ` Bart Schaefer @ 2004-10-17 14:45 ` Michael Prokop 2004-10-17 16:26 ` Bart Schaefer 0 siblings, 1 reply; 5+ messages in thread From: Michael Prokop @ 2004-10-17 14:45 UTC (permalink / raw) To: zsh-users Bart, thanks a lot for your fast reply! * Bart Schaefer <schaefer@brasslantern.com> [20041017 10:13]: > On Sat, 16 Oct 2004, Michael Prokop wrote: > > little wrapper in my zsh config: > > ,---- [ /etc/zsh/zshrc ] > Why zshrc rather than zshenv? The wrong ~/.zshenv will be loaded if $HOME > is not set correctly before the end of the global zshenv. Upps. Corrected, thanks. > > | if [[ -z "$HOME" || "$HOME" == "/" ]] ; then > > | if [[ `id -un` == "root" ]] ; then > > | export HOME=/root > > | else > > | export HOME=/home/`id -un` > > | fi > > | fi > > `---- > Using `id -un` there, particularly twice, should not be necessary. E.g., > if (( EUID == 0 )); then > export HOME=/root > else > export HOME=/home/$LOGNAME > fi Thanks. It seems to work on the "last tty", but on the other ones I'm getting: /etc/zsh/zshrc:cd:22: no such file or directory: /home/LOGIN $ echo $LOGNAME LOGIN $ whoami grml $ id -un grml I can't find the reason for this behaviour (inittab entries are the same and behaviour seems to change when booting system serveral times), but using `id -un` instead of $LOGNAME seems to fix it. > > Of course running 'cd' or 'cd $HOME' or 'cd ~' changes into my > > homedirectory. But I'd like to change path already on login. > So whether HOME is set correctly (before executing the above snippet) has > nothing to do with whether the current directory is "/" ? I would expect > the two conditions to be related, e.g., > if [[ -z "$HOME" || "$HOME" == "/" ]] ; then > # ... export $HOME correctly, then ... > cd > fi > Or is there some reason you don't want to have the "cd" in the global > config? Ah, ok - I see what you mean. Yes, seems to be related. > > Doing something like '[ $SECONDS == "0" ] && cd $HOME' is a > > workaround but changes the working directory to $HOME any time I'm > > starting a new zsh. Am I on the wrong way? > How about something like > if [[ -z "$ALREADY_DID_CD_HOME" ]]; then > export ALREADY_DID_CD_HOME=$HOME > cd > fi Oh, my thinking was too complicated. :) Thanks Bart, works like a charme! thx && regards, (-: Michael ^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: Change directory on invocation of zsh 2004-10-17 14:45 ` Michael Prokop @ 2004-10-17 16:26 ` Bart Schaefer 2004-10-17 18:55 ` Michael Prokop 0 siblings, 1 reply; 5+ messages in thread From: Bart Schaefer @ 2004-10-17 16:26 UTC (permalink / raw) To: Michael Prokop; +Cc: zsh-users On Sun, 17 Oct 2004, Michael Prokop wrote: > * Bart Schaefer <schaefer@brasslantern.com> [20041017 10:13]: > > if (( EUID == 0 )); then > > export HOME=/root > > else > > export HOME=/home/$LOGNAME > > fi > > /etc/zsh/zshrc:cd:22: no such file or directory: /home/LOGIN > $ echo $LOGNAME > LOGIN Hm. This means that one of the following occurred: - getlogin() returned "LOGIN" - getlogin() returned empty or null, and getpwuid() returned an entry for the user named "LOGIN" I'd have to guess this is a side-effect of autologin? Does it run as the user "LOGIN"? > I can't find the reason for this behaviour (inittab entries are the > same and behaviour seems to change when booting system serveral > times), but using `id -un` instead of $LOGNAME seems to fix it. If you can't figure out how to get it to be consistent, I'd suggest adding to /etc/zsh/zshenv this snippet: [[ $LOGNAME == LOGIN ]] && LOGNAME=$(id -un) Do that before the EUID/HOME snippet. Other things may be depending on LOGNAME being set correctly, too. ^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: Change directory on invocation of zsh 2004-10-17 16:26 ` Bart Schaefer @ 2004-10-17 18:55 ` Michael Prokop 0 siblings, 0 replies; 5+ messages in thread From: Michael Prokop @ 2004-10-17 18:55 UTC (permalink / raw) To: zsh-users * Bart Schaefer <schaefer@brasslantern.com> [20041017 18:28]: > On Sun, 17 Oct 2004, Michael Prokop wrote: > > * Bart Schaefer <schaefer@brasslantern.com> [20041017 10:13]: > > > if (( EUID == 0 )); then > > > export HOME=/root > > > else > > > export HOME=/home/$LOGNAME > > > fi > > /etc/zsh/zshrc:cd:22: no such file or directory: /home/LOGIN > > $ echo $LOGNAME > > LOGIN > Hm. This means that one of the following occurred: > - getlogin() returned "LOGIN" > - getlogin() returned empty or null, and getpwuid() returned an entry for > the user named "LOGIN" [.../rungetty-1.2]$ grep LOGIN rungetty.c #ifndef _PATH_LOGIN #define _PATH_LOGIN "/bin/login" #define LOGIN " login: " /* login prompt */ strncpy (ut.ut_user, "LOGIN", sizeof (ut.ut_user)); ut.ut_type = LOGIN_PROCESS; write (1, LOGIN, sizeof (LOGIN) - 1); execl (_PATH_LOGIN, _PATH_LOGIN, "-f", autologin_name, NULL); execl (_PATH_LOGIN, _PATH_LOGIN, "--", logname, NULL); error ("%s: can't exec " _PATH_LOGIN ": %s", tty, sys_errlist[errno]); [.../rungetty-1.2]$ > I'd have to guess this is a side-effect of autologin? Does it run as the > user "LOGIN"? This seems to be a side-effect of rungetty's autologin, yes. rungetty should run as user root or as the user specified in /etc/inittab, in my case this is user 'grml': 4:2345:respawn:/sbin/rungetty tty4 -u grml -g grml --autologin grml /bin/zsh I'm in contact with the debian maintainer of the rungetty-package. > > I can't find the reason for this behaviour (inittab entries are the > > same and behaviour seems to change when booting system serveral > > times), but using `id -un` instead of $LOGNAME seems to fix it. > If you can't figure out how to get it to be consistent, I'd suggest adding > to /etc/zsh/zshenv this snippet: > [[ $LOGNAME == LOGIN ]] && LOGNAME=$(id -un) > Do that before the EUID/HOME snippet. Other things may be depending on > LOGNAME being set correctly, too. Thanks, works like a charme! regards, (-: Michael ^ permalink raw reply [flat|nested] 5+ messages in thread
end of thread, other threads:[~2004-10-17 19:03 UTC | newest] Thread overview: 5+ messages (download: mbox.gz / follow: Atom feed) -- links below jump to the message on this page -- 2004-10-16 21:39 Change directory on invocation of zsh Michael Prokop 2004-10-17 3:56 ` Bart Schaefer 2004-10-17 14:45 ` Michael Prokop 2004-10-17 16:26 ` Bart Schaefer 2004-10-17 18:55 ` Michael Prokop
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).