我想对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 虚拟机上进行测试)。
我想~/.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
等。因此,如果我尝试使用.
另一个函数包装,我将失去该行为(如上例所示)。
我想到的两种方法是:
我试图确定为什么在 Docker 化环境中运行的 Web 服务器消耗的内存比我预期的要多。在调查这个问题时,我发现以下行为对我来说没有意义:
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) 每隔一段时间,我发现需要做:
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。
zsh ×2
alias ×1
autocomplete ×1
clipboard ×1
container ×1
docker ×1
file-copy ×1
filesystems ×1
memory ×1
overlayfs ×1