小编Rad*_*ugh的帖子

对于部分路径,Zsh 选项卡完成无法正常工作

我想对zsh. 在阅读了几个小时的手册后,这就是我想出的:

zstyle ':completion:*:*:*:*:globbed-files' matcher 'r:|?=** m:{a-z\-}={A-Z\_}'
zstyle ':completion:*:*:*:*:local-directories' matcher 'r:|?=** m:{a-z\-}={A-Z\_}'
zstyle ':completion:*:*:*:*:directories' matcher 'r:|?=** m:{a-z\-}={A-Z\_}'
Run Code Online (Sandbox Code Playgroud)

此外,我想按TAB一次以显示可能的完成,只有在只有一个完成时才修改我输入的内容。然后TAB第二次按下应该让我进入“菜单完成”模式。根据手册,我想出了这个:

zstyle ':completion:*' menu select
Run Code Online (Sandbox Code Playgroud)

现在一切正常,除非在一种情况下。我有两个文件夹Desktop.rstudio-desktop在我的主目录中。由于我有setopt globdots,我希望输入以下内容:

$ cd ~/dktop<TAB>
Run Code Online (Sandbox Code Playgroud)

将我的命令保留为输入,并显示为完成候选Desktop.rstudio-desktop. 相反,它删除了 dktop,给我留下了以下内容:

$ cd ~/
Run Code Online (Sandbox Code Playgroud)

我查看了所有相关手册、指南、Stack Exchange 问题和各种其他来源。但无论我做什么,我都无法完成这项工作。

有趣的是,如果我主目录中并输入以下内容,那么一切都会按预期进行:

$ cd dktop<TAB>
Run Code Online (Sandbox Code Playgroud)

也就是说,这只是路径的非前导段的问题(您可以看到C-x h这对应于directories标签而不是local-directories正在使用的标签)。

为了便于重现,这里有一个~/.zshrc将重现上述情况和行为的方法(在zsh来自 Homebrew的全新 El Capitan 虚拟机上进行测试)。

zsh autocomplete

17
推荐指数
1
解决办法
1605
查看次数

制作 ”。” 和“源”默认为 ~/.zshrc

我想~/.zshrc通过.没有参数的运行来获取我的资源。所以这:

$ .
Run Code Online (Sandbox Code Playgroud)

应该这样做:

$ . ~/.zshrc
Run Code Online (Sandbox Code Playgroud)

我希望 的正常功能.保持不变。唯一的区别应该是何时.不带参数调用。

这可能吗?

我尝试了几种不同的方法。这是其中之一:

dot_zshrc_or_args() {
    if [[ $# == 0 ]]; then
        \. ~/.zshrc
    else
        filename=$1
        shift
        \. $filename $@
    fi
}
alias .=dot_zshrc_or_args
Run Code Online (Sandbox Code Playgroud)

这是一个示例,说明为什么它不起作用:

$ echo 'echo $#' > count_args.sh
$ delegate() { . ./count_args.sh }
$ delegate foo bar baz
Run Code Online (Sandbox Code Playgroud)

最后一个命令应该 echo 3,但0如果.已经定义了上述别名,它会回显。

基本问题似乎.是 shell 专门处理的问题,允许它调用的脚本访问所有局部变量,包括$1$2等。因此,如果我尝试使用.另一个函数包装,我将失去该行为(如上例所示)。

我想到的两种方法是:

  1. 使用别名而不是函数
  2. 使其 …

zsh alias

6
推荐指数
1
解决办法
3657
查看次数

磁盘空间和 inode 似乎会消耗 Docker 容器中的 RAM

我试图确定为什么在 Docker 化环境中运行的 Web 服务器消耗的内存比我预期的要多。在调查这个问题时,我发现以下行为对我来说没有意义:

  • 创建一个 Docker 容器,docker run -d --name test ubuntu:22.04 tail -f /dev/null
  • 查看docker stats,内存使用情况报告为400KiB / 62.68GiB
  • 检查docker top test,只有一个进程在运行(tail -f /dev/null )
  • 现在在运行的容器中创建大量的文件和目录,例如docker exec -it test sh -c 'apt update && apt install -y git && git clone https://git.savannah.gnu.org/git/emacs.git'
  • 查看docker stats,内存使用情况现在报告为494.9MiB / 62.68GiB
  • 检查docker top test并确认仍然只有一个进程在运行 ( tail -f /dev/null)

那么我的 Docker 容器中这近 500MB 的内存是用来做什么的呢?我的印象是内存被进程消耗了,但容器中只有一个进程,它不能负责。

内存使用量是来自文件系统吗?主机系统正在运行 btrfs。我使用 Docker 的默认存储驱动程序overlay2,以下是有关覆盖文件系统的信息:

% …
Run Code Online (Sandbox Code Playgroud)

filesystems memory container docker overlayfs

5
推荐指数
1
解决办法
489
查看次数

如何cp分两步

每隔一段时间,我发现需要做:

cp /really/long/path/to/file.txt /totally/different/long/path/to/copy.txt
Run Code Online (Sandbox Code Playgroud)

由于我使用autojump进入目录非常快速和容易。但是,在从一个目录复制到另一个目录而不必输入至少一个完整路径时,我不知所措。

在 GUI 文件系统导航器中,这很容易:导航到第一个目录;复制原始文件;导航到第二个目录;和粘贴。但是对于cp,似乎我无法分两步进行复制。

我正在做类似以下的事情:

(use autojump to navigate to the first directory)
$ copy file.txt
(use autojump to navigate to the second directory)
$ paste copy.txt
Run Code Online (Sandbox Code Playgroud)

而不是更长的类型:

(use autojump to navigate to the first directory)
$ cp file.txt /totally/different/long/path/to/copy.txt
Run Code Online (Sandbox Code Playgroud)

是否有提供我正在寻找的功能的工具?我在 OS X El Capitan 上使用 Zsh。

clipboard file-copy

4
推荐指数
1
解决办法
1657
查看次数