如何为 bash for ash 执行类似“~/.bashrc”的文件?

如何为 bash for ash 执行类似“~/.bashrc”的文件?

我有一块主板,其默认 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

然而请注意:

  1. exec /bin/ash在“~/.profile”末尾运行将替换任何shell source “~/.profile”(即任何登录shell) 与ash实例;
  2. 这毫无意义。获取用户的登录 shell 的正确方法ash是更改​​用户的登录 shell,这可以使用 来完成chsh

所以我真的建议您从“~/.profile”中删除exec /bin/ash并改为使用用户登录 shell chsh

相关内容