Questions tagged «zsh»

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

2
bash和zsh中&& vs&的优先级
回答这个问题,我发现行为之间一个非常有趣的(和微妙的)差别bash和zsh: 在bash: romano@RRyS:~$ pwd /home/romano romano@RRyS:~$ alias x="cd /bin && ./echo A >/dev/null &" romano@RRyS:~$ x [1] 16611 romano@RRyS:~$ pwd /home/romano 如您所见,别名的执行x是在子外壳中进行的,因此当前目录不会更改。 不在zsh: [romano:~] % pwd /home/romano [romano:~] % alias x="cd /bin && ./echo A >/dev/null &" [romano:~] % x [1] 16744 [1] + 16744 done ./echo A >/dev/null 1& …
9 bash  shell  zsh 

3
如何将(函数的)第二个参数的Zsh自动完成规则设置为现有命令的规则?
我有一个自定义的Zsh函数g: function g() { # Handle arguments [...] } 在其中,我处理执行Git命令的简短参数。例如: g ls # Executes git ls-files ... g g # Executes git grep ... 我需要能够为简短参数将自动完成规则设置为Git的规则,但是我不确定如何执行此操作。 例如,我需要g ls <TAB>制表完成规则,git ls-files <TAB>这些规则将为我提供以下参数git ls-files: $ g ls --<TAB> --abbrev -- set minimum SHA1 display-length --cached -- show cached files in output --deleted -- …
9 zsh  autocomplete  git 

1
Zsh自动完成建议完成的功能(_git _vim等)
我对如何zsh为我的命令做完整的建议感到烦恼。 如果键入未安装的命令的开头,然后按tab该命令,则会提示已安装的完成功能。 可以说我要执行vim但没有安装_vim。 有没有办法关闭此功能?还是我的设置做错了什么? 我所有的点文件都在公开github.com/henrikbjorn/castle。

1
ls -l --group-directories-first(也作用于符号链接)
ls选项--group-directories-first导致目录在顶部列出,这使输出的内容更加ls简洁: ls -l --group-directories-first 但是,它不作用于symlinks,实际上symlinks是目录。有可能使用 ls -l -L --group-directories-first 它将在顶部列出这两种目录,但不会区分正确的目录和符号链接的目录,这再次令人困惑。 可以ls在顶部显示符号链接目录,同时仍使其与常规目录区分开吗? 编辑: 我正在使用bash。
9 bash  zsh  directory  ls  symlink 

1
更改zsh完成以将完成置于提示上方
我是tcsh的长期用户,最终决定尝试zsh。我一直在忙于完成,但是我不喜欢的一件事是,当我点击选项卡以获取可能有很多值的完成时,它会在提示下方打印完成选项,将提示从底部向上推终端的。TCSH将离开旧的提示符,在下面的新行上打印完成内容,然后重新打印提示符和您到目前为止输入的命令。 有什么方法可以更改完成逻辑,以便将完成选项打印在提示上方?

2
如何停止bash的语法检查源文件?
我的zsh和bash都在一个文件中包含以下代码。 if test $SHELLNAME = zsh ; then lss() { l -l ${1:-.}/*(s,S,t); } laf() { l ${1:-.}/.*(.); } lad() { l -d ${1:-.}/.*(/); } lsw() { l -ld ${1:-.}/.*(R,W,X.^ND/); } fi SHELLNAME是zsh如果外壳程序是zsh并且bash外壳程序是bash。 上面的每个函数都包含适用于zsh的代码,但不适用于bash。 当我获取此文件时,会出现以下错误。 bash: <filename>: line 67: syntax error near unexpected token `(' bash: <filename>: line 67: ` …
9 bash  zsh 

1
如何在zsh中创建一个函数来调用具有相同名称的现有命令?
如何编写一个zsh调用与该函数本身同名的现有命令的函数?例如,我试图以此来说明我的问题: function ls { ls -l $1 $2 $3 } 当我执行它时,ls *我得到以下信息: ls:1: maximum nested function level reached 我认为这是因为函数被递归调用。我该如何避免呢? 这是一个粗略的示例,在这种情况下,别名可以胜任,但是我有一个更复杂的示例,其中别名不适合,因此我需要编写一个函数。
9 zsh  function 

3
Zsh:自动修改执行的命令
我最近通过MacPorts将grc(通用着色器)安装到了我的系统中,这使我能够获得默认情况下不支持的大量命令的彩色输出(请参见下面的屏幕截图)。 我想自动使用grc,但是不是针对特定命令,而是针对每个命令。我使用zsh作为我的外壳。 基本上,每当我执行时,command -parameter 1 2 3我都希望它自动以方式执行grc command -parameter 1 2 3。 我不希望使用别名,例如对的traceroute别名grc traceroute,因为我正在添加越来越多的grc着色命令。 我已经研究了.zshrc的preexec和precmd配置,但是我还没有找到实现所需功能的方法。
9 terminal  zsh  osx 

1
检测(从脚本)是否已安装软件的最佳方法是什么?
之前,我对which跨不同平台(Linux与Solaris vx。OS X)的命令输出有所不同感到沮丧,因为不同的外壳也可能会引起问题。 type有人建议将其作为更好的替代方法,但是它的便携性如何? 过去,我写过一些函数来解析输出which并处理遇到的各种用例。它们可以在我使用的所有机器上工作,因此对我的个人脚本来说还可以,但是对于我要发布给他人使用的软件来说,这似乎非常不可靠。 仅举一个可能的例子,假设我必须从脚本中检测bash和zsh在计算机上是否可用,然后使用zsh(如果存在)运行一个命令,如果zsh不存在并且bash足够,则使用bash运行一个命令。版本没有特定错误。该脚本的其余大部分内容可能是Bourne shell或Ruby或其他任何东西,但是必须使用zsh或bash的最新版本来完成这一特定操作(AFAIK)。 我可以指望type可以跨平台使用吗?是否有其他替代方法which可以轻松,一致地回答是否已安装特定软件的问题? (如果您还想提供与我给出的示例特别相关的想法,那很好,但是我主要是在询问一般情况:找出给定机器上是否安装了特定物品的最可靠方法是什么? ?)
9 bash  zsh  standard  which 

2
在GNU屏幕上强制显示标题
默认情况下,屏幕会话的标题是输入的最后一个命令的名称,这对我来说很好,但是在某些情况下,我想更改它。我知道命令Ctrl- A A,但是它只会更改标题直到下一个命令为止,并且我希望它保留在那里直到我决定其他方式为止。 编辑: 这是preexec我在我发现的功能.zshrc if [[ "$TERM" == "screen" ]]; then local CMD=${1[(wr)^(*=*|sudo|-*)]} echo -n "\ek$CMD\e\\" fi

1
.zcompdump文件的单独路径
我了解.zcompdump-*文件是转储的配置文件,可以加快完成速度,并且可以安全地删除它们。我想将它们存储在单独的位置,因为它们会使我的主目录混乱。这样做有什么好方法? 我知道一个选择是使用ZDOTDIR变量,但这将迫使我将所有 zsh点文件放置在该位置。我只想将.zcompdump文件存储在其他位置。
9 zsh 

4
为什么`==`在zsh和bash中的[[…]`内部表现不同?
在执行此操作时,我得到了期望的结果bash: [ "a" == "a" ] && echo yes 它给了我yes。 但是当我在中执行此操作时zsh,我得到以下信息: zsh: = not found 为什么同一命令(/usr/bin/[)在不同的Shell中表现不同?
9 bash  zsh  test 

5
如何*可靠地*和*简单地*获得当前的shell解释器名称?
我正在寻找一种简单可靠的方法来从脚本或源文件(而不是从命令行)中获取当前shell的名称。我本来希望这样做,$(basename "$SHELL")但是如果我的登录外壳是zsh且我在some_script.sh中具有以下代码 this_shell=$( basename "$SHELL" ) echo "The Shell is $this_shell" echo "The Shell is $0" 并且我用bash some_script.sh它运行zsh,bash即使使用的解释器还是列出了/bin/bash。我不确定为什么外壳设计人员选择显示默认外壳而不是当前外壳,但这似乎就是我们所坚持的。 还有其他一些稍微相似的问题(此处和此处),但是它们的答案在许多方面都不够。 他们通常会假设用户试图弄清楚他们当前正在使用哪种交互式外壳,但这太疯狂了。我知道我要在其中键入命令的外壳程序-我需要可以在任何地方运行的代码,以便能够确定正在使用的外壳程序。 他们通常会提供几种不同的方法来尝试-就像您在命令行上一样,并且可以四处弄弄,直到了解到您正在使用bash为止-但是我需要一件在所有情况下都可靠的方法。 它们通常会提供脚本中完全没有用的东西,例如echo $0。如上面的脚本所示,该操作失败。(是的,它可以在交互式shell命令行中工作,但是为什么您不知道使用的是哪个shell?) 他们有时会提供一些命令(在我的有限测试中),这些命令包含正确的信息,例如ps -p $$,但是缺少跨平台,跨外壳兼容的sed / awk命令来通过管道传递该命令以获取外壳名称,而忽略随之而来的其他信息骑。 它们包括只能在几个shell上使用的东西,例如$BASH_VERSION和$ZSH_VERSION。我要支持尽可能多的炮弹可能,如fish,csh,tcsh。 如何可靠,准确地检测到任何 当前的外壳?我正在寻找可以在各种平台,脚本和尽可能多的shell中正常运行的东西1。 更新:当我发布此问题时,我希望外壳中内置一些功能来提供此信息,但事实并非如此。由于现在看来不可避免地要依赖Shell之外的东西,因此我应该更加明确地表明,我正在寻求跨平台解决方案(尽管我对上述其他答案表示反对,但如果您不这样做的话,可能会很容易错过它。没有仔细阅读问题)。 更新2 如果由于Stéphane的回答不是仅Linux,还是有人仍然认为这是仅Linux的问题的重复,那么这里就是我所要求的与他所提供的之间的区别。(请注意,他写的东西很巧妙,我没有敲门,但这并不能解决我的问题。) 我在寻找的东西简单和可靠的,那 可以添加到任何脚本或函数的定义(将由一个被采购.zshrc或.bash_profile分支或其他)。 您不能将他的脚本用作将解释器名称传递给调用脚本/函数的外部实用程序,因为它将始终由默认解释器解释并返回该名称。这使得很难或根本无法实现我的目的。如果可能的话,这仍然非常非常困难,答案中没有给出解决方案。因此他没有回答我的问题,因此不是重复的。 如果你想看到的东西,将工作,看看ShellDetective GitHub上。这样可以更容易地看到SE上已经存在的内容与该问题正在寻找的内容之间的差异(实际上是为了满足该问题的需求而编写的,而其他地方都未满足)。 (PS,如果您无法相信有这样的用例,请想象将这些函数派生到.zshrc,.bash_profile或.profile取决于正在使用的服务器以及可用的外壳的函数。它们的来源使其没有shebang行。如果它们可以在任何外壳中工作,则非常有用,但有时他们必须知道所处的外壳才能知道如何运行。) 1我不关心“贝壳”,它不是任何传统意义上的贝壳。我不关心有人为自己编写的shell。我只关心真正出现在外壳中的真实外壳,并且可以想象有人在登录某些服务器时可能会不得不使用的外壳,而他们不能在其中安装所需的任何外壳。
9 bash  shell  zsh 

3
跨壳反斜杠的处理
如何echo和printf在治疗反斜杠zsh,bash和其他贝壳? 在zsh下,我得到以下行为: $ echo "foo\bar\baz" foaaz $ echo "foo\\bar\\baz" foaaz $ echo 'foo\bar\baz' foaaz $ echo 'foo\\bar\\baz' foo\bar\baz 在bash下,情况似乎更加一致: bash$ echo "foo\bar\baz" foo\bar\baz bash$ echo 'foo\bar\baz' foo\bar\baz bash$ 但更具体而言:如何传递包含反斜杠的字符串,例如\\foo\bar\something: echo printf print 并获得完全相同的字符串?(在zsh和中bash)? 这是另一个在zsh中使用函数的实验: function foo { echo -E '$1' } $ foo \\here\is\some\path $1 我怎样才能只打印它\\here\is\some\path? 更新(注意:这已在Stephane的评论中得到回答) 我在zsh 5.0.2中尝试了以下方法: function …
9 bash  shell  zsh  quoting 

3
zsh中的别名和bash中的别名之间的区别
我到处搜寻,但找不到任何结论。zsh中的alias命令和bash中的alias命令之间有区别吗?如果不是,这是否意味着我可以在两个shell之间共享一组别名,并期望它们能够按预期工作?
9 bash  zsh  alias 

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.