Articles of zsh

自定义脚本的zsh完成

我编写了一个小脚本,它从https://wiki.archlinux.org/index.php/full_system_backup_with_rsync运行整个系统rsync,它将几个命令行选项和系统的主机名作为参数。 我想给这种types的自动完成给像ssh的东西。 但是,我并不想input用户,因为root几乎是唯一可以这样做的用户。 理想情况下,我想键入wholesystem.sh fi,并填写fileserver.domain.com 这是我的自定义完成文件。 选项可以工作,但主机填写显然不,我只是失去了从这里去的地方。 #compdef wholesystem.sh typeset -A opt_args _arguments \ '-h[help]' \ '-s[silent]' \ '-v[verbose]' \ '-d[dry run]' \ ':remote system:_user_at_host:' 我可以把它从〜/ .ssh / known_hosts中拉出来,我很好用,或者…备份系统将备份保存在〜/ WholeSystems / host.domain.com /中,我不介意它是否得到它的想法从那里。

zsh和普通shell如何共享环境variables和别名,而不需要相互复制

现在我试图从普通的Ubuntu bash中使用zsh。 当我更改为zsh shell时,我发现以前的.bashrc环境variables(例如JAVA_HOME)不能自动迁移到.zshrc 。 现在我只是将它们(导出,别名在.bashrc中)复制到.zshrc 。 我想知道是否有其他方便的方式来共享这些东西在.bashrc ,不需要明确地复制它们? 甚至当我在.zshrc添加一些东西,然后改成正常的bash,仍然可以在.zshrc中将它们共享,而不需要将它们复制到.bashrc 。 我试图source .zshrc在.bashrc ,然后改变为bash,发现下面的错误 exec bash autoload: command not found bash: /home/zhuguowei/.oh-my-zsh/oh-my-zsh.sh: line 31: syntax error near unexpected token `(' bash: /home/zhuguowei/.oh-my-zsh/oh-my-zsh.sh: line 31: `for config_file ($ZSH/lib/*.zsh); do' 而在.zshrc我也尝试了source .bashrc ,也有错误 source .zshrc /home/zhuguowei/.bashrc:16: command not found: shopt /home/zhuguowei/.bashrc:24: command not found: shopt /home/zhuguowei/.bashrc:108: command […]

在shell命令中绕过文件头的一般解决scheme

我大量使用pipe道多个linux shell命令,例如: grep BLAH file1 | sed 's/old/new/' | sort -k 1,1 > file3 我的文件通常有一个标题行,通常我必须在整个stream程中保留它。 所以,例如,我想要grep,sed和从第2行开始sorting,同时保持第一行不变。 我正在寻找一些通用的解决scheme,给一些命令(S)将保留头。 我通常将头文件写到pipe道前的文件中,然后在pipe道结束后将其回收。 我已经开始使用zshell,所以我想知道这是否有助于获得更简化的解决scheme。 也许是这样的: (箭头是图像中的pipe道) 但我不知道如何让它在zshell中工作,或者甚至是可能的。 一个问题是我需要在两个pipe道上使用命令来跟踪第一个pipe道分裂。 任何创意解决scheme

定制ZSH波浪扩展

上下文 这涉及到ZSH波浪扩展(如在bash波浪扩展中 )。 例如: ~http被扩展为/srv/http ,这是/etc/passwd设置的用户http的家(大致)。 我想做的事 我想configurationZSH为了得到任何文件名代字符扩展我希望。 这将是在我的.zshrc设置alias ~foo /foo/bar 。 我不想要的 我可以创build(以root身份)用户foo并将其设置为/foo/bar但由于任何用户都应该能够这样做,所以这样的解决scheme是不可接受的。 另外,这与~到$HOME的完成无关。 杂项 这篇文章讨论了bash tilde扩展的本质: 在Linux bash(不是主目录)中代字符的含义 。 谢谢你的回答! 😉

zsh compinit:不安全的目录。 Compaudit显示/ tmp目录

我在Raspberry Pi 2上运行zsh(Raspbian Jessie)。 zsh compinit抱怨/tmp目录不安全。 所以,我检查了目录上的权限: $ compaudit There are insecure directories: /tmp $ ls -ld /tmp drwxrwxrwt 13 root root 16384 Apr 10 11:17 /tmp 显然任何人都可以在/ tmp目录下做任何事情。 这是有道理的,因为它的目的。 所以我尝试了这个stackoverflow问题的build议。 我也在其他网站上尝试了类似的build议。 特别是,它build议closures该目录的组写权限。 由于根据ls -ld查看权限的方式,我不得不closures“全部”写入权限。 所以: $ sudo su % chmod gw /tmp % chmod aw /tmp % exit $ compaudit # nothing shows up, […]

bash和zsh之间运算符<<<的解释的区别

在zsh中, echo -n "Hello " | cat – – <<< "World" 将打印 Hello World 然而在bash中,同样的命令将被打印 World 我的解释是,在ZSH猫会打开第一个文件描述符(第一' – '选项),读pipe道“你好”,然后closures标准input,然后以某种方式重新打开它(第二' – '选项),然后阅读串“世界”,然后把它们合并成“Hello World”。 但我不明白在bash中发生了什么。 strace给了我奇怪的结果: zsh $> echo -n "Hello " | strace cat – – <<< "World" strace: Unknown pid: 7841 Process 7844 detached bash $> echo -n "Hello " | strace cat – – […]

如何防止在ZSH执行命令?

我为命令行编写了钩子: # Transforms command 'ls?' to 'man ls' function question_to_man() { if [[ $2 =~ '^\w+\?$' ]]; then man ${2[0,-2]} fi } autoload -Uz add-zsh-hook add-zsh-hook preexec question_to_man 但是当我这样做: > ls? 从man退出后,我得到: > zsh: no matches found: ls? 我怎样才能摆脱关于错误命令的信息?

不区分大小写的ZSH后缀别名

在我的.zshrc中,我已经设置了这样的后缀完成别名,以便我可以更轻松地打开文件: alias -s — txt='mate -w' 这使我可以在我的文本编辑器中打开文本文件,而无需预先编辑命令。 但是,当我试图用大写的后缀打开一个文件时有一个问题。 ZSH会识别“.txt”并在我的文本编辑器中打开它,但不会显示“.TXT”。 有没有办法使ZSH后缀识别不区分大小写,以便我可以打开这样的文件?

程序快速转储数据到标准输出。 寻找方式写入命令,而不会被淹没

程序转储到标准输出,而当我尝试input新的命令,我不明白我在写什么,因为它与输出一起抛出。 有没有分隔命令和输出的shell? 或者我可以使用两个shell,我可以运行一个命令,并将其转储到另一个stdout?

添加init.d服务(shell中的chkconfig / autocomplete)

我已经做了一个启动脚本(即myserviced),并把它放在/etc/init.d/ 我跑了 chkconfig –add myserviced 我可以启动/停止/重新启动服务只需find使用: service myserviced start 等等。但是,我注意到,当我键入“服务”,然后做TAB(获得可能的完成列表),我没有看到在可能的完成列表(它列出所有其他服务)myserviced。 如何将myserviced添加到自动完成列表中? 这是在RHEL上的zsh。 谢谢