Articles of zsh

转义别名中的引号

我想写一个别名来快速search当前目录中的文件名(不区分大小写)。 以下工作: alias f='find . -iname $@' 问题是,当我想在searchexpression式中使用wilcards时,我需要引用它们(否则zsh扩展首先处理通配符): > f podfi* zsh: no matches found: podfi* > f "podfi*" ./Podfile 我怎样才能在我的别名添加引号,使f podfi*作品? 这些尝试不起作用: alias f='find . -iname "$@"' alias f='find . -iname \"$@\"'

哦,我的zsh的历史date格式

我正在尝试格式化oh-my-zsh历史输出。 似乎fc是要走的路,因为history忽略了HISTFILE , HISTSIZE或HISTTIMEFORMAT任何设置 有没有像我用date一样来格式化的方法 我找不到有关fc命令的任何正确的文档。 也没有关于fc手册页。 fc -flE工作是用一种欧洲格式输出历史。 最后,我想要做的是找出我今天和今天打了多less个命令。 这里有一个小问题。 目前我有这样的设置: alias today='date +"%d.%m.%Y"'没有格式令牌,让我删除前导零(我想6而不是06) 但我有更多的格式选项比奇怪的zsh历史命令fc。 历史输出date为22.6.2016, today是22.06.2016因此,我不能这样做: fc -flE | grep $(today) | wc -l fc -flE | grep $(today) | wc -l 任何反馈非常感谢!

自动将所有环境variables从一个shell转移到另一个shell

我想将一个shell的所有环境variables(在我的情况下:kornshell)自动转移到另一个shell(在我的情况下:z-shell)。 如果可能的话,传输应该在zshell的启动文件中,以避免使用额外的脚本,因为我想将其传输到其他服务器以达到相同的目的。 我到目前为止所尝试的是: 将$ export $(ksh -c env | tr '\n' ' ')放在.zshrc(Zshell的启动文件)中。 这不起作用,因为该命令是作为当前shell(zsh)的一个子项执行的,因此它的环境variables与zsh相同,而不是kornshell的环境。 在一个额外的脚本 #!/usr/bin/ksh echo $(ksh -c env | tr '\n' ' ') # for testing if it works export $(ksh -c env | tr '\n' ' ') 这东西的工作要么。 任何意见非常感谢。

Shell进入zsh并从bash脚本执行命令

我正在尝试一下虚拟化技术,所以我一直在用vagrant来configuration一个centos7虚拟机,现在我正在configuration应用程序。 我的stream浪configuration运行一个bootstrap.sh文件这是一个bash脚本,在其中我安装了zsh,然后我想configuration它按照https://github.com/sorin-ionescu/prezto 。 第一步是启动zsh然后运行一些命令。 这是我目前的代码。 echo "Installing zsh" yum install -y zsh echo "Configure zsh" # touch /home/vagrant/.zshrc exec /usr/bin/zsh git clone –recursive https://github.com/sorin-ionescu/prezto.git "${ZDOTDIR:-$HOME}/.zprezto" setopt EXTENDED_GLOB for rcfile in "${ZDOTDIR:-$HOME}"/.zprezto/runcoms/^README.md(.N); do ln -s "$rcfile" "${ZDOTDIR:-$HOME}/.${rcfile:t}" done chsh -s /bin/zsh 我希望这是我ssh进入虚拟机的默认shell。 它似乎没有工作,没有与stream浪的步骤错误,所以我只想知道这是否可能,如果这似乎是正确的? 谢谢

获取使用哪个可执行文件的目录

我想使用哪个命令直接进入一个目录。 cd $(which python3.6) 显然这是行不通的,因为which python3.6会返回一个可执行文件。 现在的问题是:我怎样才能进入这个可执行文件的位置?

shell脚本最好的方法是删除文件不在一对

我有一组成对的文件: /var/log/messages-20111001 /var/log/messages-20111001.hash 我有几个这些旋转了,现在我留下了大量的/var/log/messages-201110xx.hash文件没有关联的日志。 我想清理混乱,但我不确定如何删除不属于“对”的文件。 我可以使用bash或zsh(或任何LSB工具,真的)。 我需要删除所有没有关联日志的.hash文件。 例 /var/log/messages-20111001.hash /var/log/messages-20111002.hash /var/log/messages-20111003.hash /var/log/messages-20111004.hash /var/log/messages-20111005 /var/log/messages-20111005.hash /var/log/messages-20111006 /var/log/messages-20111006.hash 应该减至: /var/log/messages-20111005 /var/log/messages-20111005.hash /var/log/messages-20111006 /var/log/messages-20111006.hash

如何根据条件格式化我的zsh提示符?

我使用这里给出的答案: zsh ansi颜色代码如何工作? 格式化和添加颜色到我的zsh提示符。 有什么方法可以根据某些条件来格式化提示? 例如,如果主机名在其中包含PROD ,那么我想让我的提示有一个红色的背景。 否则,我不想要背景和粗体的绿色文字。

在zsh中完成Hadoop命令

我喜欢zsh中的tab完成function。 但是,当我使用hadoop命令,似乎不再工作。 那么有没有想法在zsh中自动完成hadoop命令? 非常感谢。

适当的zsh shell命令擒纵

我有一个非常强大的技巧,我试图保存每一个我input的命令: function zshaddhistory() { COMMAND_STR=${1%%$'\n'} [[ ( -z $COMMAND_STR ) || ( $COMMAND_STR =~ hist(ory)? ) || \ ( $COMMAND_STR =~ ^l(s\|l\|a)?$ ) || \ ( $COMMAND_STR =~ ^(d\|gd\|git\ diff\|glp\|gg)$ ) \ ]] && return 1 # do not do anything on common commands # do the needful echo "$PWD; $COMMAND_STR; $TTY@$HOST@$(date +%s.%N)" >> ~/.zsh_enhanced_history […]

Zsh强调常见的完成前缀

我已经看到了这样的 zsh.org线程和这个 Reddit线程,显示如何使用颜色突出显示完成的常见前缀。 不幸的是,这覆盖了我设置的LS_COLORS 。 我从我的LS_COLORS获取了很多信息,如果可能,我希望它们保持LS_COLORS 。 相反,我宁愿有一个共同的前缀下划线(留下的颜色)。 喜欢这个 但用下划线代替颜色,保持我的LS_COLORS完好无损。 编辑: 我有一个可能的解决scheme,但它需要能够为不同的标签(而不是组)指定不同的list-colors 。 我们将每种types的文件(符号链接,pipe道等等)都放到自己的标签中,并且有一个包含它们的组。