【问题标题】:Struggling to add alias at open new terminal in CentOS8努力在 CentOS8 中打开的新终端添加别名
【发布时间】:2020-07-13 03:01:31
【问题描述】:

所以我试图创建一个别名来在打开一个新的 bash 窗口时运行两个 python 脚本,但我一直遇到奇怪的问题。如果我在终端窗口中手动创建别名,没问题:

alias UserPasswordReset="python3 /bin/Admin.py"
alias SystemFileCheck="python3 /bin/SystemFileCheck.py"

如果我手动创建一个名为 aliasfile.sh 的文件并将其放在 /etc/profile.d/ 中,当然 #!/bin/bash 作为第一行,打开新终端时没有问题,别名在那里并且工作。

所以这是问题所在,如果我预先创建文件并将其复制到 /etc/profile.d/ 目录中,即使文件的内容完全相同,我也会得到奇怪的结果。如果我将文件更改为与其中的其他文件相同,则没有区别。这是我得到的输出

不确定这里发生了什么或我做错了什么,这应该是一件很简单的事情。

【问题讨论】:

  • 请勿发布代码、数据、错误消息等的图片 - 将文本复制或输入到问题中。 How to Ask

标签: linux bash terminal centos alias


【解决方案1】:

您必须使用. aliasfile.sh 来获取文件。并删除 shebgang 行 (#!/bin/bash) 否则别名将仅适用于脚本。

【讨论】:

  • 谢谢,所以我删除了 '#!/bin/bash',这消除了打开新终端时出现的第一个错误,但不理解 '.别名文件.sh'。我要重命名文件吗?是什么 '。别名的部分以及如何实现它?
  • 只需在命令行中运行它(bash 或 sh 或任何你使用的)。
  • @sportzpikachu:#!如果文件是来源,则行不会造成伤害;它根本没用。如果使用文本编辑器来编辑文件,它仍然会很方便,它会检查该行以进行正确的语法着色。但是,文件中的另一个错误是它(或在 bash 启动期间获取的另一个文件)包含回车符,正如我们从错误消息中看到的那样。
  • 那种破坏对象的想法是,任何打开新终端窗口的用户都可以使用这些别名,而无需任何手动交互。 /etc/profile.d/ 中的 .sh 文件应该为用户自动添加这些别名。我也试过这样做,但我仍然得到:':[Errno 2] No such file or directoryileCheck.py Error
  • 你有.bashrc.profile,或者类似的吗?如果是这样,将别名行添加到该文件中,它将在终端启动时加载。
【解决方案2】:

如果您希望别名对每个用户自动可用,您必须在一些全局初始化文件中添加定义,该文件将自动获取。

这里的问题是您需要 interactive shell 的别名,而交互式 shell 的规则有点棘手。从手册页:

当 bash 作为交互式登录 shell 调用时,它首先读取并执行命令 如果该文件存在,则从文件 /etc/profile 中获取。当一个不是登录 shell 的交互式 shell 启动时,bash 会从 ~/.bashrc 读取并执行命令(如果该文件存在)。

因此,您必须在您的 /etc/profile 中获取您的 aliasfile.sh。但这仅涵盖第一种情况。例如,如果用户打开一个交互式非登录 shell,他仍然看不到定义。由于您不允许破解用户的主目录,因此您最好告诉每个用户也添加一个

. /path/to/setup/directory/aliasfile.sh

在他的~/.bashrc

【讨论】:

    猜你喜欢
    • 2021-08-11
    • 2023-04-09
    • 2019-04-15
    • 2018-09-07
    • 1970-01-01
    • 2020-05-14
    • 2020-10-08
    • 2018-06-28
    • 1970-01-01
    相关资源
    最近更新 更多