如何用“dir”中的相同内容替代“ls -l”?

如何用“dir”中的相同内容替代“ls -l”?

我正在使用仅使用本地访问 SSH 的 Ubuntu 服务器,但是当我发出命令时,dir我得到的只是一个没有详细信息的文件和文件夹列表,但使用dir -l给了我一个很长的列表,但与使用相比仍然没有任何内容,ls -l后者显示与权限相对应的颜色,如何使用 获得相同的显示dir,而不必继续附加命令行开关?例如dir -l

以前使用dir会自动显示长列表,但随着时间的推移和大量更新,dir现在不再有自动显示长列表的功能。

答案1

你可以为 .bashrc 添加一个别名,以便告诉服务器上的 shellls -l无论何时你输入什么都运行dir,基本上只需以下一行:

alias dir='ls -l'

保存并退出,然后运行source .bashrc重新加载。

答案2

如果您要创建dir别名,我建议alias dir='dir --color=auto -l'这可能就是您正在寻找的行为。这样做的好处是保留了与 的dir不同之处ls,并且不依赖于ls您可能拥有的任何别名,甚至不受其影响。

您可以定义与外部命令同名的别名和 shell 函数(例如lsdir),并且可以定义它们来调用该外部命令并向其传递附加选项。这就是上面建议的别名的作用。所以也许您曾经有一个dir运行 的别名(或 shell 函数)dir -l

不是但完成后,dir就像这样ls -Cbls和命令dir不同。dir命令的目的是成为一个类似于的命令ls,其行为不受是否在终端中运行的影响。 因此,您可以考虑不是根本不创建dir别名,而只是使用lsll代替。ll是的常用别名ls -l

虽然别名扩展不是由输出是否为终端决定的,但它主要由运行命令的 shell 是否是交互式的决定。(有办法覆盖这一点,但通常你不想这样做。)此外,只有--color=auto当输出设备是终端时才会着色,这样如果你(例如)将输出重定向到文件,你就不会得到通常不想要的颜色代码。

但是,如果你想要改变运行时发生的情况dir,那么我建议将其设为别名的原因dir --color=auto -l添加您所要求的选项,同时仍隐式使用-C-b。 的存在-C并不重要,因为它被 覆盖-l-C表示以列形式显示,-l表示以详细列表形式显示。 它不能同时执行这两项操作,因此它会执行 的任何操作最后的您传递给它的选项告诉它要做什么。但-b仍然很重要;它会导致文件名中的奇怪字符被转义,这样您通常可以将显示的文件名复制到终端命令中而无需修改。

当然,您也可以改用alias dir='ls -bl --color=auto'。这将达到相同的效果(您不需要包含,-C因为它无论如何都会被覆盖-l,如上所述)。或者至少如果您没有ls别名,它会达到相同的效果。别名扩展不是完全递归的,这就是为什么您可以将别名设置ls为以 开头的命令ls(或dir以 开头的命令dir)。但别名扩展仍会继续,直到结果不是别名或进一步扩展会产生递归循环。定义您的dir别名不是就使ls您免受任何ls可能被别名化所导致的意外影响而言。

至于别名定义放在哪里,你当然将其直接放在.bashrc你的主目录中的文件中,如下所示mikewhatever 建议。在这种情况下,这样做的好处是,您几乎肯定已经ls在该文件中拥有别名定义,您可以将dir别名放在那里附近。您的.bashrc文件甚至可能已经有注释掉的#别名(带有),您可以取消注释并使用它们。

但是,我建议将新的别名定义(您自己编写的)放入 中.bash_aliases。Ubuntu 中的默认.bashrc文件将获取该文件(如果存在)。也就是说,.bashrc通常包含:

# Alias definitions.
# You may want to put all your additions into a separate file like
# ~/.bash_aliases, instead of adding them here directly.
# See /usr/share/doc/bash-doc/examples in the bash-doc package.

if [ -f ~/.bash_aliases ]; then
    . ~/.bash_aliases
fi

如果由于某种原因您的.bashrc文件没有该内容,那么您可以添加它(或者#如果您不想重复注释,则只添加不以 开头的行)。

相关内容