Questions tagged «zsh»

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

2
为什么进程替换<()与ssh -F不兼容
我有一些无所事事的虚拟机。要登录他们,我发出vagrant ssh命令。我想使用常规ssh命令登录。的vagrant ssh-config输出合适的配置文件 $ vagrant ssh-config Host default HostName 127.0.0.1 User vagrant Port 2201 UserKnownHostsFile /dev/null StrictHostKeyChecking no PasswordAuthentication no IdentityFile /home/cbliard/.vagrant.d/insecure_private_key IdentitiesOnly yes LogLevel FATAL 在文件中输出此配置并与配合使用时ssh -F,一切正常: $ vagrant ssh-config &gt; /tmp/config $ ssh -F /tmp/config default =&gt; logged successfully 使用进程替换运算符&lt;(cmd)阻止创建临时配置文件时,它将失败: $ ssh -F &lt;(vagrant ssh-config) default Can't open …

1
使用具有tty输出的可变命令对stdin和stdout进行配管时,zsh无法输入到终端
系统信息: macOS Sierra 10.12.6 zsh 5.4.2 (x86_64-apple-darwin16.7.0) GNU bash, version 4.4.12(1)-release (x86_64-apple-darwin16.3.0) 滚动到示例在底部,如果你只是想挖成简单的例子,我做。 注意:我不是一个大zsh用户。 我一直在寻找在fzf按键绑定的bash和zsh。 注意它们都是如何运行可变命令的$(__fzfcmd)。__fzfcmd默认情况下,输出fzf到stdout,并且参数替换仅运行fzf由输出产生的命令()。 bash和zsh脚本之间的区别是,bash另一个脚本通过管道传递输出,$(__fzfcmd)但zsh仅将其捕获到数组中。我的猜测是由于一个问题,zsh当您进一步通过管道传输fzf无法输入的位置的输出时,fzf通过管道传输到的过程fzf不会得到任何标准输入。您唯一的选择是to ^Z或^C。^C由于某种原因,似乎使该过程成为背景。或者,也许他们只是想以阵列的形式使用它们,以便可以在其上运行zle vi-fetch-history。该bash版本在与"\e^": history-expand-line 现在fzf并不重要。似乎您只需要一个输出到的程序tty就可以通过参数替换来调用该程序,从而导致此问题。因此,我将显示一些更简单的示例。 这是一些其他输出到的命令,这些命令tty可能会导致以下问题zsh: vipe(在管道中间运行编辑器) 'vim -' (使vim从stdin读取。类似于vipe,但不会输出到stdout) 在下面的例子中,更换的每次出现vipe用vim -,如果你不想做一个单独的安装。只是要记住,vim -不会像vipe那样将编辑器内容输出到stdout 。 例子: 1) echo 1 | vipe | cat # works in both bash and zsh 2) echo 1 | $(echo …
11 bash  zsh  pipe  tty 

1
在zsh中列出别名,函数和变量的名称
我需要一种方法来列出zsh中别名,函数,变量,数组的名称(不包括主体/内容/值)。最佳情况下,其行为应类似于compgen: compgen -a # will list all the aliases you could run. compgen -A function # will list all the functions you could run. compgen -A variable # will list all the variables defined. 背景 我需要这个来开发env_parallel.zsh:https ://www.gnu.org/software/parallel/env_parallel.html
11 shell  zsh 

4
zsh和mksh在哪里与bash不兼容?
其他POSIX兼容外壳在多大程度上可以作为bash的合理替代品?它们不需要是真正的“即插即用”替换,但是足够接近以使用大多数脚本并通过一些修改来支持其余脚本。 我想要显式的bash脚本-初始化脚本,DHCP客户端脚本等-只需最少的修改即可工作 我希望我自己的更专业的shell脚本集合不需要太多修改 我想拥有诸如字符串操作和内置正则表达式模式匹配之类的功能 我所知道的唯一认真的竞争者是zsh和mksh。因此,对于你们中的一个或两个都擅长的人: bash分别具有zsh和mksh没有的功能? shell与bash共享哪些功能,但使用不兼容的语法呢?
11 bash  zsh  mksh 

1
将键序列绑定到Escape,zsh
如何在zsh中映射jj到Esc? 我正在尝试重新创建我在vim中设置的映射的键jj映射,ESC以便每当我按两次时j,它将an发送&lt;Esc&gt;到vim ,这使我可以更方便地进入普通模式。 我已经尝试过了bindkey 'jj' ^[,并且将要尝试bindkey 'jj' ^[[,但是我怀疑它是否会起作用。我还检查了正常模式下zsh提供的命令列表,但没有看到包含normal或的任何内容escape。 注意我文件中 的^[字符~/.zshrc是实际的硬编码转义符;不只是人物^和[。

2
如何使zsh中的RPROMPT在每次输入时自动更新?
我RPROMPT设置为使用显示svn信息vcs_info。它读RPROMPT=${vcs_info_msg_0_}。vcs_info被称为使用precmd()。但是,当我更改目录时,RPROMPT不会更新。仅当我再次调用提示符(通过源〜/ .zshrc或提示符)并且在chdir上不变时,它才起作用,除非再次调用提示符。有什么办法可以改变这种行为?


2
ZShell中的16种颜色
我似乎只能在zshell提示中调用8种颜色。 例: PROMPT="[%n@%{$fg[magenta]%}%m%{$reset_color%} %.] %# " 工作良好。然而, PROMPT="[%n@%{$fg[brmagenta]%}%m%{$reset_color%} %.] %# " 不起作用 基本上,没有“明亮”的颜色变化出现。 经过研究后,我发现zsh的颜色由“颜色” setopt调用。 在做 echo ${(o)color} 产生以下输出: 00 01 02 03 04 05 07 08 22 23 24 25 27 28 30 30 30 30 31 31 32 32 33 33 34 34 35 35 36 36 37 …
11 terminal  zsh  colors 

1
在zsh中扩展代字号
我在使用FreeBSD时偶然发现了zsh的这种行为: % dd if=/dev/zero bs=1M count=1 of=~/test2 dd: failed to open '~/test2': No such file or directory 这真的让我感到困惑,因为同一件事在bash中效果很好。 我可以touch在zsh中使用波浪号来归档文件,然后使用ls它们: % touch ~/test2 % ls ~/test2 /home/christoph/test2 起初,我假设zsh并未意识到后面会有路径,of=所以它没有扩展~。但是自动完成文件名就可以了。实际上,如果使用现有文件名,则以开头~,然后按Tab键,该路径会在我键入的命令中扩展。 为什么zsh传递~/test2给dd而不是/home/christoph/test2? zsh在Linux上的行为相同。实际上,我在上面执行了这些命令并将其输出复制到Linux机器上。
11 zsh  tilde 

2
在外壳上进行JSON解析
如何解析Shell上的JSON输出? 例如,Amazon Web Services提供了一个CLI来检索实例的状态: $ aws ec2 describe-instances &lt;my_instance_id&gt; 但是该命令返回JSON字符串。该命令的输出如下所示: $ aws ec2 describe-instances x12345 { "Reservations" : { "OwnerId": "1345345" "Groups": [], "SecurityGroups": [ { "Foo" : "yes" "Bar" : "no } ] } } 是否有可用于解析JSON输出的shell内置程序? 例如,我想在shell变量中捕获FOO以下内容output["Reservations"]["SecurityGroups"][0]{"Foo"}。 如果有帮助,我对Zsh可能适用的解决方案特别感兴趣。
11 zsh  string  json 

5
.ssh / config在zsh中启动远程会话
我想在不键入以下命令的情况下启动远程会话 ssh user@remoteserverip -t zsh 我知道我可以更改中的主机名~/.ssh/config以简单地使用如下代码: ssh serveralias -t zsh 但是我想删除该-t zsh参数。 有没有无需编写函数就能实现的方法?
11 ssh  zsh  remote  session 

1
从zsh shell运行bash脚本
我在上运行bash脚本时遇到问题zsh。该脚本与下面的脚本相似,应该在bash下运行: #!/bin/bash echo "&lt;235234&gt;" | egrep -oe [0-9]+ 但是,我的外壳程序默认是打开的zsh,因此要运行上述脚本,我需要/bin/bash在zsh提示符下键入,然后运行. script.sh。 但是,这将导致错误,并且我得到: zsh: no matches found: [0-9]+ (我应该得到235234)。 在这一点上,我感到困惑,并有以下问题: 如果我在bash,为什么会报错zsh? 为什么正则egrep表达式失败?正则表达式对我来说似乎正确。 注意:万一重要,我不应该修改脚本(脚本由多个用户共享,我们不应该对其进行更改)。 谢谢
11 bash  zsh 


4
从〜/ .zshrc sudo'ing功能时,“找不到命令”
我有一个功能~/.zshrc: findPort() { lsof -t -i :$1 } 通常的调用是findPort 3306。 我想以提升的特权运行它。但是我得到“找不到命令”。 ➜ git 🍔 sudo findPort 3306 sudo: findPort: command not found 我猜想原因是root用户或者以非交互式shell运行(因此不引用.zshrc),或者引用了别的 .zshrc。 我曾经看到过类似的问题alias,但是关于用户定义的函数却没有问题。有关此问题的答案alias涉及为添加别名~/.zshrc: alias sudo='nocorrect sudo ' 也许: alias sudo='sudo ' 我已经尝试了这两种解决方案,但问题仍然存在(是的,我已经重新启动了外壳)。 我还尝试运行sudo chsh以确保我的根shell在.NET下运行zsh。这些解决方案都不能消除“找不到命令”问题。 有没有办法在sudo下运行用户定义的函数?
10 sudo  zsh 

5
使用参数扩展为mkdir -p生成参数列表
我有这样的事情: % ls -1dF /tmp/foo/* /tmp/foo/000f9e956feab3ee4625aebb65ae7bae9533cdbc/ /tmp/foo/002e34c2218f2c86fefd2876f0e5c2559c5fb3c4/ /tmp/foo/00b483576791bab751e6cb7ee0a7143af43a8069/ . . . /tmp/foo/fedd0f7b545e7ae9600142656756456bc16874d3/ /tmp/foo/ff51ac87609012137cfcb02f36624f81cdc10788/ /tmp/foo/ff8b983a7411395344cad64182cb17e7cdefa55e/ 我想bar在下的每个子目录下创建一个目录foo。 如果我尝试用 % mkdir -p /tmp/foo/*/bar ...我得到了错误 zsh: no matches found: /tmp/foo/*/bar (事后看来,我可以理解该错误的原因。) 我知道我可以使用for循环解决原始问题,但是我很想知道是否zsh支持某种形式的参数扩展,该扩展将为的单次调用生成所需的参数mkdir -p。IOW,相当于“附加/bar到扩展产生的每个前缀”的参数扩展/tmp/foo/*,导致 % mkdir -p /tmp/foo/000f9e956feab3ee4625aebb65ae7bae9533cdbc/bar ... /tmp/foo/ff8b983a7411395344cad64182cb17e7cdefa55e/bar
10 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.