我有一块主板,其默认 shell 是sh
。在“/etc/profile”的末尾有:
exec /bin/ash
这会将 shell 更改为ash
。
如果我想执行一个定义了一些别名的文件,我该怎么办ash
?
我尝试使用:
exec /bin/ash -f /root/aliases.sh
但是当我使用它登录到主板时ssh
退出并显示连接已关闭。
还有其他方法吗?
答案1
当您以exec /bin/ash -f /root/aliases.sh
ash
非交互方式运行时,它会在执行“/root/aliases.sh”后立即退出;这就是 SSH 会话结束的原因。
因此解决方案是以交互方式运行 shell;从man 1 ash
:
如果在进入 shell 时设置了环境变量 ENV,或者在登录 shell 的 .profile 中设置了环境变量 ENV,则 shell 接下来会从 ENV 中指定的文件中读取命令。因此,用户应将仅在登录时执行的命令放在 .profile 文件中,将每个 shell 都要执行的命令放在 ENV 文件中。
因此只需ENV
在“~/.profile”中设置:
export ENV=/root/aliases.sh
并以交互方式运行 shell:
exec /bin/ash
然而请注意:
exec /bin/ash
在“~/.profile”末尾运行将替换任何shell source “~/.profile”(即任何登录shell) 与ash
实例;- 这毫无意义。获取用户的登录 shell 的正确方法
ash
是更改用户的登录 shell,这可以使用 来完成chsh
。
所以我真的建议您从“~/.profile”中删除exec /bin/ash
并改为使用用户登录 shell chsh
。