Questions tagged «zsh»

Zsh是具有许多高级命令行和脚本功能的shell。


1
什么时候需要双引号?
过去的建议是,将涉及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 …


8
将命名参数传递给Shell脚本
有没有简单的方法可以将命名参数传递(接收)到Shell脚本? 例如, my_script -p_out '/some/path' -arg_1 '5' 并在内部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" 在Bash或Zsh中可能吗?

10
当我检查某件事时,请记住一个半类型的命令
我经常发现自己处于以下位置:我已经开始在bash提示符下键入一个长命令,但是到一半时,我发现需要使用另一个命令检查某些内容。当我在控制台(不是X)时(通常是这种情况),这是一个问题,因为那时我只有以下几种令人满意的方式来做到这一点,我知道: 点击ctrl+ alt+ F2并登录另一个虚拟控制台,找出我想要的内容,然后返回并继续 ctrl+ a,键入echo + space+ enter,找出我想要的内容,按↑直到找到我的命令ctrl+ a,delx 5,ctrl+ e,然后继续 突出显示到目前为止我用鼠标键入的内容(如果正在运行gpm,通常是这样),按ctrl+ c中断,找出我想要的内容,同时注意不要用鼠标突出显示内容,然后按鼠标中键在新提示下继续 向命令行中的上帝祈祷,半写的命令不会产生任何不良影响,而只是失败,然后小心地按Enter键,然后找出我想要的内容,按向上箭头,直到我重新获得命令,然后继续 跳到我的时间机器中,回到过去并提醒自己在开始键入命令之前先进入屏幕,回到现在,按ctrl+ a c,找出我想要的内容,按ctrl+ a ctrl+a并继续 所以我想知道的是,是否有一些更优雅的方法?一种subshel​​l命令还是类似命令? 我对不需要任何准备或设置即可工作的方法最感兴趣。
97 bash  command-line  zsh 


7
如何在别名命令上使用“哪个”?
像大多数用户一样,我设置了一堆别名来为常用程序提供默认的标志集。例如, alias vim='vim -X' alias grep='grep -E' alias ls='ls -G' 问题是,如果我想使用which上看到我的vim/ grep/ ls/等从,别名的方式来获得: $ which vim vim: aliased to vim -X 这是有用的输出,但是在这种情况下不是我想要的;我知道vim是别名,vim -X但我想知道它 vim的来源。 除了临时取消定义别名(以便我可以which在上面使用)之外,是否有一种简单的方法来which“解开”别名并在其上运行? 编辑:似乎which是一个shell内置的,在不同的shell上具有不同的行为。在Bash中,SiegeX对--skip-alias旗帜的建议起作用了。但是,我在Zsh上。那里是否存在类似的东西?
76 shell  zsh  alias  which 

2
在zsh中的$ PATH缓存中重建自动完成索引(或任何它称呼的)和二进制文件
安装新软件后,已经打开的带有zsh的终端将不知道新命令,并且无法为这些命令生成自动完成功能。显然打开一个新终端可以解决此问题,但是可以重建索引(或您所谓的索引),以便自动完成功能可以在旧终端上运行吗? 我尝试过,compinit但是没有帮助。另外,有一种不依赖于shell的方法吗?最好也有一种方法来验证答案(除了卸载并重新安装之外)。 我的意思是在输入命令名称的几个字符后,我可以按Tab,zsh其余的操作应提取全名。
75 zsh  autocomplete 

7
我有多少深弹?
问题:查找我有多少壳深。 详细信息:我从vim打开了很多外壳。构建并运行并退出。有时我忘记了,打开另一个Vim,然后打开另一个shell。:( 我想知道我有多少深的贝壳,也许一直都在我的贝壳屏幕上。(我可以管理这部分)。 我的解决方案:解析进程树并查找vim和bash / zsh并找出其中的当前进程深度。 这样的东西已经存在了吗?我什么都找不到。
73 bash  shell-script  shell  vim  zsh 

6
如何检测外壳是否由SSH控制?
我想从shell脚本(更具体地说是.zshrc)中检测它是否通过SSH控制。我尝试了HOST变量,但它始终是运行Shell的计算机的名称。我可以访问SSH会话来自的主机名吗?比较两者将解决我的问题。 每次我登录时,都会显示一条消息,说明上次登录时间和主机: Last login: Fri Mar 18 23:07:28 CET 2011 from max on pts/1 Last login: Fri Mar 18 23:11:56 2011 from max 这意味着服务器具有此信息。
69 ssh  shell-script  zsh 

3
ESC键由于其Alt +行为而导致终端中的少量延迟
我的终端设置是带有vi绑定的gnome-terminal + tmux + zsh。 在像vim之类的应用程序中,或者甚至在zsh的命令行vi编辑模式下,我都需要频繁按下该ESC键,但是在此键生效之前会有一点延迟。参见GNU屏幕使Vim ESC键变慢 经过一番实验,我发现敲击ESC键和立即按下另一个键(例如b)与击键具有相同的效果Alt+b。我不知道为什么会这样(可能是由于遗留原因,当时没有Alt?我不知道)。无论哪种方式,我都有两个Alt键,并且我不希望这种行为与我的ESC键有关。我已经尝试过,C+[并且它也有同样的问题。 我不确定是谁对此负责,是gnome-terminal还是tmux还是我的OS本身(Ubuntu Natty)。关于如何解决这个问题的任何想法都很棒。 更新:我检查是否在另一个终端(LXTerminal)上没有tmux,并且那里也存在延迟。

4
有什么方法可以防止将命令添加到您的历史记录中?
有什么方法可以防止将命令添加到您的历史记录中?我有一个命令要保留在历史记录文件中,并且当我搜索存储在内存中的历史记录时,我真的不在乎将其保存在该文件中,尽管这没什么大问题。有什么方法可以防止这种情况,还是我只需要返回并编辑历史文件。 更新:我没有意识到这可能是特定于外壳的。我的壳是zsh。欢迎您回答其他外壳程序,以便人们知道如何在其外壳程序中执行此操作。


6
zsh中有哪些功能,bash中缺少哪些功能,反之亦然?
作为Linux用户,我一直只使用bash,因为它是我使用的每个发行版的默认设置。使用其他Unix系统(例如BSD)的人们似乎更频繁地使用其他shell。为了学习更多,我决定尝试zsh。 作为bash用户: 我会错过哪些功能? 我应该注意什么?
62 bash  zsh 

1
Zsh中的命令历史
Zsh如何跟踪命令历史记录? 我在主目录中看到两个文件:.zhistory和.zsh_history。它们之间有什么区别?这些文件似乎包含了我的所有历史记录。Zsh会永远保持向其中之一添加行吗?这会不会使历史记录搜索速度太慢? 我可以安全地使这些文件符号链接到另一个位置吗?(例如,一个git存储库以跟踪历史记录的更改)

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.