我经常发现自己创建单字符别名,因为毕竟它们的存在是为了节省输入时间。我很好奇是否应该避免这种情况。我不知道有任何冲突。
答案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
,则会造成不必要的损坏。
所以重点是:如果您使用单字母别名,请仅将它们用于只读操作(而不是用于可能会更改数据的操作,如果无意中运行,可能会导致问题)