标签: zsh

.zshenv、.zshrc、.zlogin、.zprofile、.zlogout 中应该/不应该做什么?

我正在寻找关于应该和不应该包含在zsh.

我了解这些文件的来源顺序,以及它们的来源条件,但我仍然不清楚每个文件应该包含什么。

startup zsh

280
推荐指数
2
解决办法
15万
查看次数

将命名参数传递给 shell 脚本

有没有什么简单的方法可以将命名参数传递(接收)给 shell 脚本?

例如,

my_script -p_out '/some/path' -arg_1 '5'
Run Code Online (Sandbox Code Playgroud)

并在内部my_script.sh将它们接收为:

# I believe this notation does not work, but is there anything close to it?
p_out=$ARGUMENTS['p_out']
arg1=$ARGUMENTS['arg_1']

printf "The Argument p_out is %s" "$p_out"
printf "The Argument arg_1 is %s" "$arg1"
Run Code Online (Sandbox Code Playgroud)

这在 Bash 或 Zsh 中可能吗?

bash zsh shell-script arguments

192
推荐指数
8
解决办法
28万
查看次数

什么时候需要双引号?

过去的旧建议是对任何涉及 a 的表达式加双引号$VARIABLE,至少在希望 shell 将其解释为单个项目的情况下,否则,内容中的任何空格$VARIABLE都会脱离 shell。

但是,我知道在较新版本的 shell 中,不再总是需要双引号(至少出于上述目的)。例如,在bash

% FOO='bar baz'
% [ $FOO = 'bar baz' ] && echo OK
bash: [: too many arguments
% [[ $FOO = 'bar baz' ]] && echo OK
OK
% touch 'bar baz'
% ls $FOO
ls: cannot access bar: No such file or directory
ls: cannot access baz: No such file or directory
Run Code Online (Sandbox Code Playgroud)

zsh,而另一方面,同样的三个命令成功。因此,基于此实验,似乎在 中bash可以省略 内部的双引号[[ ... ]],但不能省略内部 …

shell bash zsh shell-script quoting

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

*sh shell 中的反引号(即`cmd`)是否已被弃用?

我在 Unix 和 Linux 以及其他使用短语“反引号已被弃用”的站点上多次看到此评论,这与 Bash 和 Zsh 等 shell 相关。

这个说法是真的还是假的?

shell scripting bash zsh shell-script

141
推荐指数
2
解决办法
3万
查看次数

为什么 ZSH 以突出显示的百分比符号结束一行?

我有时会在各种应用程序中注意到这一点。我经常认为这是因为输出被提前取消(例如 ctrl+c)或类似的东西,而 zsh 正在填充一个新行字符。但是现在好奇心占据了我的心,因为它在 bash 中似乎没有做到这一点。

zsh

zsh

猛击

在此处输入图片说明

Sequence程序是我在阅读 Java 认证时从书中提取的内容,只是想看看它是否可以编译和运行。我确实注意到它没有使用包/类中的println()方法System.out。相反,它使用普通的 old print()

缺少换行符是我得到这个符号的原因吗?

bash prompt zsh newlines

106
推荐指数
3
解决办法
4万
查看次数

当我检查某事时记住一个半键入的命令

我经常发现自己处于以下位置:我已经开始在 bash 提示符下键入一个长命令,但是中途我发现我需要用另一个命令检查某些内容。当我在控制台(没有 X)时,这是一个问题,通常是这种情况,因为那时我只有以下不满意的方法来做到这一点,我知道:

  • 命中ctrl+ alt+F2和登录另一个虚拟控制台上,并找出我想要的东西,然后回去继续
  • ctrl+ a,输入 echo + space+ enter,找出我想要的,按?直到我找到我的命令,ctrl+ a, delx 5, ctrl+ e,然后继续
  • 用鼠标突出显示到目前为止我输入的内容(如果 gpm 正在运行,通常是这样),按ctrl+c中断,找出我想要的内容,同时注意不要使用鼠标突出显示内容,然后按鼠标中键在新的提示下并继续
  • 向命令行大神祈祷,写一半的命令不会有任何不利影响,只会失败,然后小心翼翼地按回车,然后找出我想要的东西,按向上箭头直到我得到我的命令,然后继续
  • 跳进我的时光机,回到过去并提醒自己在开始输入命令之前启动屏幕,回到现在,按ctrl+ a c,找出我想要的,按ctrl+ a ctrl+a,然后继续

所以我想知道的是,有没有更优雅的方法来做到这一点?一种子shell命令或类似的?

我对不需要任何准备或设置即可工作的方法最感兴趣。

command-line bash zsh

104
推荐指数
7
解决办法
6896
查看次数

100
推荐指数
2
解决办法
3万
查看次数

在 zsh 中的 $PATH 缓存中重建自动完成索引(或任何名称)和二进制文件

安装新软件后,使用 zsh 已打开的终端将不知道新命令,也无法为这些命令生成自动完成。显然打开一个新终端可以解决这个问题,但是可以重建索引(或任何你称之为的东西)以便自动完成可以在旧终端上工作吗?

我试过了,compinit但这没有帮助。另外,有没有一种不依赖于shell的方法?很高兴有一种方法来验证答案(除了卸载并重新安装它)。

我的意思是在输入命令名称的几个字符后,我可以按Tab,然后zsh应该做剩下的工作来调出全名。

zsh autocomplete

91
推荐指数
3
解决办法
3万
查看次数

所有 bash 脚本都与 `zsh` 兼容吗?

我希望从 bash 切换到 zsh,但担心 bash 脚本的兼容性。

所有 bash 脚本/函数都与 zsh 兼容吗?因此,如果这是真的,那么 zsh 只是对 bash 的增强吗?

bash zsh

91
推荐指数
3
解决办法
7万
查看次数

如何在别名命令上使用`which`?

像大多数用户一样,我设置了一堆别名来为常用程序提供一组默认标志。例如,

alias vim='vim -X'
alias grep='grep -E'
alias ls='ls -G'
Run Code Online (Sandbox Code Playgroud)

问题是,如果我想用来which查看我的vim/ grep/ ls/etc 来自哪里,别名会妨碍:

$ which vim
vim: aliased to vim -X
Run Code Online (Sandbox Code Playgroud)

这是有用的输出,但不是我在这种情况下要寻找的;我知道vim别名为,vim -X但我想知道 vim来自哪里。

除了暂时取消定义别名以便我可以使用which它之外,是否有一种简单的方法可以which“解开”别名并在其上运行?

编辑:这似乎which是一个 shell-builtin,在不同的 shell 中具有不同的行为。在 Bash 中,SiegeX 对--skip-alias标志的建议有效;但是,我在 Zsh 上。那里是否存在类似的东西?

shell zsh alias which

90
推荐指数
3
解决办法
3万
查看次数