在 Linux/bash 上为稍微复杂的脚本添加别名

在 Linux/bash 上为稍微复杂的脚本添加别名

Stormvirux 在另一个线程中提供了这个很好的脚本。它将列标题放在列表的输出上ls -l

#!/bin/bash
{ echo Permissions links Owner Group Size Last_modMonth Last_modTime Last_modTime Filename; ls -l ; } | column -t | awk 'NR!~/^(2)$/'
ls -l | head -1

只需在命令行上运行它就可以了。我喜欢它并且想将它用作别名,比如lsl在运行 bash 的 Linux 系统上。

但我一生都无法弄清楚如何使分隔符起作用以便正确解释它。当我尝试在命令行上使用 alias 命令时(我在将其提交到配置文件(如 )之前执行此操作.bashrc),它将不起作用。当我尝试各种方法打包它以便正确解释它时,我收到各种错误。

有人可以告诉我如何让它作为别名工作,或者给我指出一个很好的参考资料,它可以清楚地告诉我需要做什么才能让这样的东西作为别名工作?

答案1

另一种方式,您可以将其定义为您的函数.bashrc

lsl() {
  { echo Permissions links Owner Group Size Last_modMonth Last_modTime Last_modTime Filename;
  ls -l; } | 
  column -t | 
  awk 'NR!~/^(2)$/'
  ls -l | head -1
}

答案2

如果您必须将其作为别名:

alias lsl='{ echo Permissions links Owner Group Size Last_modMonth Last_modTime Last_modTime Filename; ls -l ; } | column -t | awk '\''NR!~/^(2)$/'\'';ls -l | head -1'

我们需要用反斜杠转义内部单引号,这样它们就不会被解释为停止字符串。

如果我们使用双引号,则!会被解释为历史扩展并且需要更多的转义,这可能是你最终遇到的最令人困惑的问题(比如“ bash: !~/^: event not found”,这是难以理解的胡言乱语)。


上面的方法可行,但更好的方法是将该文件放在路径中的某个位置并使其可执行。比方说,创建~/.local/bin一个脚本lsl,其中包含您帖子的内容,然后chmod +x ~/.local/bin/lsl向您的.bashrc

export PATH="$HOME/.local/bin:$PATH"

以确保能够找到该目录中的可执行文件。然后你可以lsl在任何地方编写来运行代码。这种方法更易于维护且更易于理解。

相关内容