【问题标题】:bash removing slashes in front of directory namesbash 删除目录名前面的斜杠
【发布时间】:2022-07-05 16:27:53
【问题描述】:

我正在尝试重新获得 c-shell 和 tcsh 的一些简单性。我有一个简单的别名,可以让我列出目录 (alias lsdd 'ls | grep /')。我找到了一个帖子,里面有几个解决方案,但没有一个特别令人满意。例如,

ls -d */

除非没有子目录,否则效果很好,在这种情况下,您会收到一条错误消息——不完全优雅。

echo */

没有给出那个错误,但列表不像单列那样容易阅读。

所以,我一直在/etc 中查找 bash 定义其ls 命令的位置,以便它使用颜色,并去除目录名称后面的/。这似乎是一个剪芽的好地方。在哪个启动文件中,bash 在 ls 命令中从目录名称中去除斜杠?

【问题讨论】:

  • 如果你传递给ls一个以斜杠结尾的目录名,ls也会在输出中附加一个斜杠。当您执行ls -d $HOME /tmp/ 时,您可以观察到这一点:您的主目录将不带斜线列出,而 /tmp 将带斜线。

标签: bash directory ls


【解决方案1】:

如果您只想列出不带斜杠的目录并且在单个列中,ls 不一定是最好的实用程序。别名在某种程度上已经过时了;现在推荐函数。

lsdd() {
  local -a list=( */ )
  printf '%s\n' "${list[@]%/}"
}

如果默认情况下没有子目录,则打印单个 *。为了摆脱它,我们可以暂时设置nullglob 选项并在之后恢复其初始状态:

lsdd() {
  local tmp=$(shopt -p nullglob)
  shopt -s nullglob
  local -a list=( */ )
  printf '%s\n' "${list[@]%/}"
  eval "$tmp"
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-16
    • 2016-04-21
    • 2016-10-04
    • 2016-05-31
    • 2019-05-07
    • 2016-01-30
    相关资源
    最近更新 更多