是否需要避免使用任何单字符 bash 别名?

是否需要避免使用任何单字符 bash 别名?

我经常发现自己创建单字符别名,因为毕竟它们的存在是为了节省输入时间。我很好奇是否应该避免这种情况。我不知道有任何冲突。

答案1

要避免的事情:

  • 具有单字符名称的标准或常见命令:(w显示登录的用户活动)、X(X Window 系统服务器)、R(R 编程语言解释器)、[(类似于test
  • 您的 shell 或常见 shell 的内置函数:[, ., :, -,r
  • shell 关键字:{, },!
  • ?*通配符
  • shell 语法中的特殊字符:`"$&();'#~|\<>,(在某些 shell 中也是^%、SPC、TAB、NL(以及某些 shell 中的其他空格)
  • 最好避免使用非 ASCII 字符(因为这些字符根据区域设置具有不同的编码)
  • 最好避免控制字符(除了上面已经提到的 TAB 和 NL),因为它们不太容易输入,并且根据上下文,并不总是可见,或者具有不同的表示形式。仅zsh允许您定义和使用 NUL 字符的别名。允许您为(字节值为 1 的控制字符)bash定义别名,但显然不使用它。^A

要查找具有单字符名称的命令:

  • bash:(compgen -c | grep -x . | sort -u还包括关键字,假设命令名称不包含换行符)

  • zsh:(type -m '?'或者type -pm '?'如果您不需要函数/别名/内置函数/关键字)。

  • Debian 或衍生版本:在任何具有单字符名称的包中查找任何命令:

    $ apt-file find -x '/s?bin/.$'
    coreutils: /usr/bin/[
    e-wrapper: /usr/bin/e
    python3-q-text-as-data: /usr/bin/q
    r-base-core: /usr/bin/R
    r-base-core: /usr/lib/R/bin/R
    r-cran-littler: /usr/bin/r
    r-cran-littler: /usr/lib/R/site-library/littler/bin/r
    wims: /var/lib/wims/public_html/bin/c
    xserver-xorg-core: /usr/bin/X
    

答案2

最简单的方法可能是检查具有该名称的内容是否已经存在。在我的系统上:

$ for char in {A..z}; do type "$char" 2>/dev/null; done
R is /usr/bin/R
X is /usr/bin/X
[ is a shell builtin
l is aliased to `ls -CF'
w is /usr/bin/w

据我所知,这显示了所有相关的碰撞:

  • 其他别名如l
  • 外壳保留字
  • 功能
  • Shell 内置函数
  • 文件命令,例如w[

答案3

致辞:“我很好奇是否应该避免这种情况。”

正如其他答案中所述,只要您使用别名覆盖的命令不是您要使用的命令,就不应该出现技术问题。

使用这样的别名的主要挫折是当您帮助朋友或 ssh 进入尚未复制 .bashrc 的计算机时。你所发展的所有肌肉记忆都会让你感觉就像一条离开水的鱼。我发现它是如此令人迷惑,所以我试图将我的别名保持在最低限度。

答案4

这取决于您使用别名的目的(例如如果错误执行了错误的别名,问题有多大),以及你犯错误的频率。

例如:

  • 使用r='rm -rf *'andt='ls -l *tar*'可能是一个非常糟糕的主意,即使您很少按错键。
  • 使用r='file *.png | grep RGB'andt='ls -l *tar*'可能不是问题。

在后面的情况下,如果您输入r而不是 (close on Keyboard, and因此很容易错误输入) t,您只会得到您不想要的输出,并且您可以轻松输入正确的别名。然而,在前一种情况下,如果您输入r而不是t,则会造成不必要的损坏。

所以重点是:如果您使用单字母别名,请仅将它们用于只读操作(而不是用于可能会更改数据的操作,如果无意中运行,可能会导致问题)

相关内容