0

是否可以在 Unix (Solaris) 系统上更改用户的默认交互式 shell,而不会对通过相同用户名远程登录的其他软件产生任何影响(例如:通过 rsh 或 ssh)。

理由:我的公司销售价值数百万美元的机器,但仍将 csh 作为默认 shell。由于 csh 对用户非常不友好(例如:没有通过向上/向下箭头键浏览历史记录),我建议将默认 shell 更改为 tcsh。tcsh 应该与 csh 向后兼容,但显然它仍然会导致一些远程登录机器的脚本出现问题。

由于没有真正的商业案例来升级 shell 和修复所有现有脚本,我正在寻找一个简单的解决方案,不费吹灰之力。

4

2 回答 2

2

您可能想要区分交互式 shell 和批处理 shell,而不是远程 shell 和本地 shell,对吧?对于前一种情况,您应该检查脚本$-中的变量。.profile

多想一下,csh在提供与 Bourne shell 家族相同的信息方面并不是很好。除非确实有一种“标准”方式来检测交互模式,否则您有两种选择:

  • csh登录 shell替换为ksh和(在完成上述检查后)exec csh进行交互式会话。
  • .login(或调用该脚本的任何内容csh)中检查父进程名称,如果是login, getty, xdm(或用于登录系统的任何名称),则您的会话是交互式的(另一种选择是检查父进程的 EUID) .
于 2013-10-04T19:01:41.073 回答
0

只是不要(再次)更改默认外壳。首先将其从shto更改csh为错误。再做一次将是另一个。

引入兼容性中断是没有意义的,尤其是对于维护兼容性非常认真的 Solaris。

您可能会做的(尽管有时被认为是有争议的)是为受影响的用户帐户创建别名,即具有不同用户名、密码和外壳但具有相同 uid、gid 和主目录的条目。

这将允许远程脚本仍然使用旧环境,而真正的用户将使用他们选择的 shell。

于 2013-10-04T23:24:16.513 回答