Выполнить несколько команд для некоторого условия

sshd запускает оболочку входа в систему, когда клиент не отправляет команду для запуска. Это должно имитировать поведение rsh, которое вызывало службу rlogindвместо службы rshd, когда не было задано никакой команды для запуска.

Чтобы сообщить оболочке, что это должна быть оболочка входа в систему, например rlogind, loginили telnetd, sshdзапускает вашу оболочку с argv[0], которая начинается с -.

Или, конечно, zshкак и любая другая оболочка, понимает это. В противном случае его нельзя было бы вызвать в режиме входа в систему .

Здесь симптом, заставивший вас думать, что вы не получили оболочку входа в систему, заключался в том, что /etc/profileне был интерпретирован.

/etc/profile— это файл инициализации сеанса входа в систему для Bourne -, например для оболочек. Ожидается, что синтаксис там будет в синтаксисе оболочки Bourne (или, возможно, синтаксисе POSIX sh, поскольку оболочка Bourne почти никогда не используется в наши дни )и читается при входе в систему всеми оболочками, чей синтаксис (в основном )обратно совместим с синтаксисом Bourne или POSIX sh.

cshи tcsh, которые имеют совершенно другой синтаксис, вместо этого используют /etc/csh.login. fishиспользует/etc/fish/config.fish(независимо от того, находится ли он в режиме входа в систему или нет ).

Синтаксис

zshтакже не полностью совместим с синтаксисом Bourne/POSIX, поэтому по умолчанию он не читается /etc/profile. Его файлы конфигурации в режиме входа в систему имеют вид/etc/zsh/zprofile(или /etc/zprofileв зависимости от того, как zshбыл настроен во время сборки )и/etc/zsh/zlogin(или /etc/zlogin), последний из которых получен после zshrc.

zshисходит только из /etc/profileв режиме эмуляции shили ksh, и в этом случае его синтаксис намного ближе к синтаксису POSIX sh, чем в режиме эмуляции zshпо умолчанию.

Если вы хотите, чтобы zshбыл источником /etc/profileв режиме входа в систему, вам нужно добавить source /etc/profileв /etc/zsh/zprofile, но вы хотите сделать это только после того, как убедитесь, что синтаксис /etc/profileи любой другой файл, из которого он исходит, совместим с файлом zsh.

В качестве альтернативы,можно добавить:

emulate sh -c 'source /etc/profile'

- /etc/zsh/zprofile. Тогда /etc/profileбудет использоваться в shрежиме эмуляции (, а функции, объявленные в нем, также сохранят shрежим эмуляции ).

0
20.10.2021, 19:59
0 ответов

Теги

Похожие вопросы