В настоящее время я работаю в школе над самодельной оболочкой, поэтому мне сейчас любопытно, как устроены оболочки. Да, это может быть действительно захватывающим!
В любом случае, нам, очевидно, приходится иметь дело со случаем, когда наша оболочка будет запущена с пустым окружением, то есть командой «env -i». При использовании env -i переменная среды extern абсолютно пуста, поэтому нам нужно создать базовый PATH, PWD и все остальное.
Наша ссылка csh, потому что это легко и просто. Когда вы запускаете csh с помощью env -i, а затем выводите переменные, вот что вы можете увидеть:
$ env -i csh
% set
addsuffix
argv ()
csubstnonl
cwd /Users/noesierra-velasquez
dirstack /Users/noesierra-velasquez
echo_style bsd
edit
gid 20
group staff
history 100
killring 30
owd
path (/usr/bin /bin)
prompt %
prompt2 %R?
prompt3 CORRECT>%R (y|n|e|a)?
shell /bin/tcsh
shlvl 1
status 0
tcsh 6.17.00
tty ttys001
uid 501
user noesierra-velasquez
version tcsh 6.17.00 (Astron) 2009-07-10 (x86_64-apple-darwin) options wide,nls,dl,al,kan,sm,rh,color,filec
% env
HOSTTYPE=intel-mac
VENDOR=apple
OSTYPE=darwin
MACHTYPE=x86_64
SHLVL=1
PWD=/Users/noesierra-velasquez
LOGNAME=noesierra-velasquez
USER=noesierra-velasquez
GROUP=staff
HOST=MacBook-Pro-de-Noe-Sierra-Velasquez.local
REMOTEHOST=
Итак, как вы можете видеть, HOME не установлен, и он кажется мне абсолютно нормальным. Если вы наберете cd
, вы получите cd: No home directory.
,
Мы живем в нормальном мире.
Но здесь магия. Типа, внутри вашего пустого csh env -i zsh
. Zsh загрузит. Теперь выведите все переменные env.
(Примечание: это прекрасно работает, если вы набираете напрямую env -i zsh
, даже из zsh, я делаю это здесь так, только чтобы быть уверенным, что нет хитрого трюка с zsh, вызывающим себя или что-то в этом роде)
% env -i zsh
$ env
HOME=/Users/noesierra-velasquez
LOGNAME=noesierra-velasquez
SHLVL=1
PWD=/Users/noesierra-velasquez
OLDPWD=/Users/noesierra-velasquez
PATH=/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin
_=/usr/bin/env
Вот Это Да ! Что случилось !? Кажется, у zsh есть способ вернуть $ HOME и $ OLDPWD из того, что мне кажется чистым небытием. (кстати, если кто-то не знает, я уверен, что он использует paths.h, чтобы вернуться на свой путь).
Очевидно, я знаю, что "чистое ничто" не является жизнеспособной возможностью, поэтому я спрашиваю вас, ребята: вы знаете, как zsh возвращает HOME и OLDPWD?
Спасибо за ваше терпение и хорошего дня! :)