Questions tagged «zsh»

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

1
zsh中的数组和循环
我正在尝试学习中的循环和数组操作zsh。 假设我在zsh中有两个数组,它们具有相同的未知元素数,每个元素都包含路径列表,例如 LOCAL_ARRAY=($LOCAL_PATH_1 $LOCAL_PATH_2 $LOCAL_PATH_3) REMOTE_ARRAY=($REMOTE_PATH_1 $REMOTE_PATH_2 $REMOTE_PATH_3) 我想用一个公共索引同时遍历两个数组,以便可以执行以下操作: cd $LOCAL_PATH_i hg pull $REMOTE_PATH_i 在每次迭代中。如何在zsh中执行此操作? 另外,我在zsh文档中搜索了循环控制和数组,但收效甚微。有没有很好的教程介绍zsh中的循环,数组等基础知识?是否适合那些缺乏bash或shell脚本经验但具有编程背景的人?
9 zsh  array 


2
zsh中函数的调用上下文:等同于bash`caller`
在bash中,我可以写: caller 0 并接收呼叫者上下文的: 电话号码 功能 脚本名称 这对于调试非常有用。鉴于: yelp () { caller 0; } 然后,我可以写信yelp查看正在到达的代码行。 我可以实现caller 0在bash如下: echo "${BASH_LINENO[0]} ${FUNCNAME[1]} ${BASH_SOURCE[1]" 我怎样才能获得相同的输出caller 0中zsh?

2
ls忽略“没有匹配项”
我想列出的所有文件的文件夹,名为中foldername有扩展test,atest或btest。 我立即想到要跑步 ls ./foldername/*.{a,b,}test 除非扩展名没有任何内容,否则此方法工作正常atest,在这种情况下,我会收到错误消息zsh: no matches found: ./foldername/*.atest。 有什么方法可以简单地忽略此错误并打印确实存在的文件? 我需要在ZSH和BASH中都可以使用。

2
ZSH中类似鱼的参数完成搜索
我在摆弄鱼,发现这种方便的行为 如果输入wget -<tab><tab><tab>,则会进入交互式菜单。但是,键入时,我搜索了参数本身的描述。我在zsh中尝试了此操作,在此菜单中键入内容似乎只能使我回到交互式提示中。有没有办法在zsh中实现类似的功能?

1
如何以编程方式访问zsh补全?
zsh具有完成系统,可通过按Tab键激活: llama@llama:~$ git st<Tab> Completing main porcelain command stash -- stash away changes to dirty working directory status -- show working-tree status Completing plumbing internal helper command stripspace -- filter out empty lines 我能弄清楚的是,这来自脚本/usr/share/zsh/functions/Completion/Unix/_git,其中_git调用了完成命令。 假设我知道补全函数的名称(例如_git),那么如果输入特定的字符串并按Tab键,如何得到输出结果呢?本质上,我正在尝试输入ex。git st并获得上面的输出(通过脚本以编程方式)。 还有许多其他现有的问题,关于这个的庆典,但我还没有发现任何解释如何与zsh来实现这一目标。


4
在括号扩展期间如何抑制生成的参数之间的间隔?
我使用以下命令创建了要测试的URL列表: echo -e localhost:8080/reports/{promos,promo-updates,scandown}/{130,139,142}{,-unburdened,-burdened}{,.pdf,.xls,.xlsx,.csv,.preload}"\n" >> urls.txt 不幸的是,urls.txt每个URL后面都有一个空格(当然,第一个除外)。我了解为什么会发生这种情况,并且我意识到我可以通过在sed表达式中使用管道将其剥离,但是我想知道是否有一种抑制它的方法。(这看起来很愚蠢和古怪,但这与很多人不喜欢“虐待猫”的偏好没有什么不同。) 我尝试使用双引号来抑制单词拆分,但是那也抑制了括号的扩展,所以这是不可行的。 我尝试将IFS更改为空字符串,但也没有用: IFS='' echo -e localhost:8080/reports/{promos,promo-updates,scandown}/{130,139,142}{,-unburdened,-burdened}{,.pdf,.xls,.xlsx,.csv,.preload}"\n" >> urls.txt 也没有将其更改为换行符: IFS='\n' echo -e localhost:8080/reports/{promos,promo-updates,scandown}/{130,139,142}{,-unburdened,-burdened}{,.pdf,.xls,.xlsx,.csv,.preload}"\n" >> urls.txt

1
OS X和其他Unices中的/ etc / paths
是/etc/paths通过阅读每一个壳,我在OS X上运行?例如,如果我使用zsh,它将解析/etc/path以填充$PATH吗? OS X遵循的填充顺序到底是什么$PATH?它与其他Unices的做法不同吗?
8 osx  zsh  path  etc 

2
如何更改subshel​​l的提示
我正在尝试创建一个简单的脚本,该脚本除其他外将创建一个子外壳: #!/bin/sh # setup "${@:-$SHELL}" # teardown 问题是:我需要更改默认提示,因此例如: $#默认的shell $ ./myscript (myscript)的$#子shell (myscript)的$退出 $ 我尝试更改PROMPT和PS1,但这些都不起作用。我怎样才能做到这一点? PS .:如果可能,我需要一个既适用于Bash又适用于ZSH的解决方案。
8 bash  zsh  prompt 

1
如何在全局模式(zsh)中使用参数替换
我想处理一堆以某些后缀结尾的文件,因此我编写了以下zsh脚本,但是它不起作用。 EXT=(.jpg .png .gif) EXT=${(j.|.)EXT} # EXT becomes '.jpg|.png|.gif' for f in *($EXT); do # should become '*(.jpg|.png|.gif)' but failed process-one-file $f done 为什么不起作用?如何混合参数替换和glob模式?
8 zsh  glob 


2
如何在zsh中为制表符完成指定超时?
Zsh的完成功能非常出色,除了这一功能。当我尝试在包含大量文件/网络文件夹的文件夹中完成操作时,将花费几分钟并显示此错误。 example.com:~$ ls /path/to/some/bigFolder/[TAB] zsh: do you wish to see all 620 possibilities (124 lines)? 相反,有没有一种方法可以指定超时,之后z​​sh不应尝试自动完成?我也无法取消其搜索。

1
在没有chsh或管理员特权的情况下更改默认Shell
我在该线程中看到了以下代码片段:如何将csh更改为bash作为默认shell sleep 2 if (-x /usr/local/bin/bash) then exec /bin/sh -c '. ~/.profile; exec /usr/local/bin/bash' endif 我的理解是,如果您将此代码段放入~/.login其中,则bash在您登录时会调用它。 我遇到类似的情况,我想使用类似的代码段来调用zsh与我登录时所使用的默认代码段不同的代码段。遇到这种麻烦的部分原因是因为我无法选择zsh在中允许的选项中我想要的版本chsh,并且我没有管理员权限。 有了这个: 在不同版本的zsh之间切换时,如何更改上面的代码段来执行此操作? 为什么exec上面的代码片段需要两个命令?他们在做什么?另外,为什么上述代码段使用sh 和 bash(用户应该使用登录csh)
8 shell  zsh  login  exec 

1
在终端的特定位置显示后台进程的标准输出
每次打开新终端或进行新登录时,我都有一条命令运行。 该程序产生的输出(彩色)应放在命令提示符之前。运行可能需要几秒钟,这将阻止我在此之前使用终端(除非在后台运行)。 鉴于zsh具有一些重绘终端而又不破坏现有文本的高级方法,我想知道如何以一种无需使用它就可以等待的方式运行此命令,但是我可以使用终端完成后,将打印输出,就好像它不是首先放在后台一样。 实际上,我希望可以做些什么: Command output: ... (running on background) me@computer: somecommand me@computer: someothercommand 命令完成后,我将得到: Command output: * Output foo * Multiple lines bar * and some yada me@computer: somecommand me@computer: someothercommand 我尝试在开始时将进程置于后台,但随后无法清晰显示输出。我得到类似的东西: Command output: [2] 32207 me@computer: somecommand me@computer: someother * Output foo * Multiple lines bar * and …
8 terminal  zsh 

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.