别名vs导出简单命令


33

对于诸如的简单命令less,最好使用别名或导出选项?一个人比另一个人有什么好处吗?

例如,如果我想less始终使用该-R选项来显示原始字符,则这两种解决方案都可以工作:

  1. export LESS='-R'
  2. alias less='less -R'

对于这样一个简单的案例,一个相对于另一个有什么好处吗?任何一种情况都会导致问题而另一种情况不会导致问题?

我已经仔细阅读了几页info和几man页,以及对其进行了谷歌搜索,但是我仍然坚持这一点。


1
不,这实际上取决于个人喜好。我投票决定关闭此选项,因为似乎更多基于意见。
slm

另外三个解决方案:创建一个shell函数(仅在shell中起作用,而不必是交互式的);在〜/ bin或任何位置创建脚本(具有shell启动开销,但可以在运行中的shell和其他程序中立即运行,并且具有持久性);程序特定的配置文件(less您可以使用进行配置lesskey
deltab 2014年

3
@slm不是基于观点的,或者至少不是故意的。一个人可能需要更多的开销,并且不必要地使用资源,尤其是在更复杂的情况下。在* nix世界中,传统上可能更正确,或者某个地方甚至有正式标准。程序员总是对“草率的编码”感到恼火,即使出于所有意图和目的它实现了相同的目标。
–skittleys

Answers:


30

两者之间的区别是别名只是一个外壳功能。环境变量被所有子进程继承(除非有意清除)。

环境变量将是更有可能即使工作less间接启动,诸如经由另一壳体(例如tcsh), ,manvimpsql等。


3
特别是,别名仅在交互式 shell中起作用:您有时不能在shell脚本中使用它们。bash -c 'alias ll="ls -l"; ll'不会使用别名。
2014年

啊,我不知道!因此,如果我export LESS='-R'在.zshrc中,打开一个zsh会话,然后在同一会话中切换到bash(.bashrc中没有导出),环境变量是否仍会设置?我
原本

@deltab啊,是的,由于grep的着色问题,我确实知道这种区别。感谢您指出。
–skittleys

1

这在很大程度上取决于您使用的工具。将有一些工具允许您使用其中任何一种,而其他工具则仅允许一种。

有些命令被其他人调用,并读取环境变量并接受相同的开关,但是向每个命令添加相同的开关很麻烦,就像编译器一样make,这里的环境变量会发光。您设置变量,然后忘记它。它也可以是临时性的,并且可以用于单个命令,这也是一个优点。

最重要的是,这是一项优先事项,并且是完成任务的最佳措施,有时会比环境变量更容易且永久地设置别名,而有时则需要一系列工具,它们的行为与环境变量相同。喜欢环境变量。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.