标签: zsh

尝试一下 zsh —— 第一个谜团:

全部,

尽管我对 bash 感到厌恶,但我想我应该尝试一下 zsh,它似乎被很好地谈论。所以,我立刻就遇到了这堵砖墙:

function z
{
   var="ls -l"
   "$var"
}
Run Code Online (Sandbox Code Playgroud)

在 bash 中执行“ls -l”,在 zsh 中它给我“找不到命令:ls -l”,因为我对 zsh 完全陌生,所以我不知道它和 bash 之间可能有什么不同,这会导致多于。

zsh

1
推荐指数
1
解决办法
515
查看次数

通过 ssh 自动使用与用户默认不同的 shell

我们在服务器上使用 Bash 作为默认 shell,但我们中的一些人更喜欢 zsh,因此我们寻找一种方法来自动设置 ZSH。

chsh 到 zsh 我不是一个选择。

ssh bash zsh

1
推荐指数
1
解决办法
2408
查看次数

ZSH 将彩色数组对象打印到终端窗口

仍在学习 shell 脚本和 ZSH。但想知道是否有人知道如何创建一个简单对象数组,即 json 类型对象/哈希,然后以不同颜色的列格式打印每个对象的属性。

我想在我的 zsh 插件中创建一个特定的函数,以非常精确的方式打印到我的终端。

开放式问题:

1.) 如何用不同的颜色打印特定的字符串

2.) 如何定义具有多个键/值对的基本对象数组

下面的伪代码有望阐明我想要做什么。

function display-collection() {
  collection=(
    {param1: foo1, param2: bar1, param3: baz1 }
    {param1: foo2, param2: bar2, param3: baz2 }
    {param1: foo3, param2: bar3, param3: baz3 }
    {param1: foo4, param2: bar4, param3: baz4 }
    {param1: foo5, param2: bar5, param3: baz5 }
    {param1: foo6, param2: bar6, param3: baz6 }
  )
  print -l $collection
}
Run Code Online (Sandbox Code Playgroud)

使上述函数将内容以彩色方式吐出到终端

foo1 (RED TEXT) bar1 (DEFAULT COLOR) baz1 (YELLOW COLOR)
foo2 (RED TEXT) bar2 …
Run Code Online (Sandbox Code Playgroud)

arrays shell zsh colors

1
推荐指数
1
解决办法
4350
查看次数

find 命令在 zsh 和 bash 中的工作方式不同

我刚刚将 shell 从 bash 切换到 zsh,我注意到 find 命令的工作方式有一些不同的行为。

在我的旧 bash shell 中,我有一个函数基本上复制了 find 命令的行为。由于某种奇怪的原因,find 命令在我的旧系统中不起作用zsh,但在我的旧系统中起作用bash

bash 中的命令

~ /java_src: f stringBuf*
./com/sun/org/apache/xml/internal/utils/StringBufferPool.java
./java/io/StringBufferInputStream.java
./java/lang/StringBuffer.java
Run Code Online (Sandbox Code Playgroud)

zsh 中的相同命令

~ /java_src: f stringBuf*
zsh: no matches found: stringBuf*
Run Code Online (Sandbox Code Playgroud)

这是函数

# find shorthand
function f() {
     find . -iname "$1"
 }
Run Code Online (Sandbox Code Playgroud)

关于为什么会出现这种情况有什么建议吗?

linux bash shell zsh

1
推荐指数
1
解决办法
2225
查看次数

eval 字符串中的 ZSH 别名定义和扩展

我在学习 ZSH 的过程中遇到了好奇心,并且我很难找到与此相关的信息。我想知道为什么这不起作用的技术解释(定义然后在单个 eval 调用中扩展别名):

eval "alias d='echo hello'; d"

zsh: command not found: d
Run Code Online (Sandbox Code Playgroud)

而这确实有效:

eval "function d = { echo hello; }; d"

hello
Run Code Online (Sandbox Code Playgroud)

alias zsh eval

1
推荐指数
1
解决办法
1448
查看次数

zsh - 使用 autocd 完成第一个选项卡

我目前正在从 csh 切换到 zsh,我正在编写一个 .zshrc 试图获取我在这个新 shell 中习惯的所有选项。

我使用 autocd (进入一个目录,只需输入其名称(无需 cd 命令),我想知道我的第一个是否可能建议当前目录中存在的所有文件(就像它在 csh 中工作一样)。

我非常习惯这种方式,在输入我的命令之前,先按一下我可以打开的文件或我可以“autocd”进入的目录的概述,而无需在命令行中编写任何内容。

现在,当我第一次按下它时,它不会触发任何完成机制,但它只是写入一个实际的表格。

我还没有找到任何解决方案,如果有人有任何神奇的选择来获得这个结果,请随时启发我!

谢谢

zsh tab-completion zsh-completion completion

1
推荐指数
1
解决办法
2917
查看次数

在 zsh 中如何绑定键盘快捷键来运行最后一个命令?

我经常发现自己想要重复一个命令,虽然!!很有用,但我想将其绑定到 ctrl-w 或类似的东西。有没有办法做到这一点?

编辑:我知道向上箭头可以实现我想要的功能,但是我不想离开主行。作为一名狂热的 Vim 用户,我知道了坚持使用 Home 键的价值。

我查看了这篇关于添加访问命令的快捷方式的文章info,并尝试从中推断出一些内容,但没有成功。Zsh 对我大喊大叫,说 zle 不活跃什么的。

我知道这将依赖于我的 shell 的配置方式的知识,因此下面我粘贴了一些相关代码,以及整个 .zshrc 和点文件的链接。

# oh-my-zsh plugins. zsh-aliases and drush are custom plugins.
plugins=( git z tmux web-search colored-man zsh-aliases drush)
ZSH_TMUX_AUTOSTART=true
#... $PATH, start background process (clipboard integration for tmux, 
# glances system monitor), history options, editor, all truncated for brevity.
# use vim mode
bindkey -v
#show insert/normal mode in prompt
function zle-line-init zle-keymap-select {
    RPS1="${${KEYMAP/vicmd/NORMAL}/(main|viins)/INSERT}"
    RPS2=$RPS1
zle reset-prompt …
Run Code Online (Sandbox Code Playgroud)

zsh keyboard-shortcuts oh-my-zsh

1
推荐指数
1
解决办法
4079
查看次数

Zsh导出忽略引号和反斜杠

我有一个 shell 脚本(我们称之为produce.sh),它以以下形式输出数据,但不将其保存到文件中:

FOO=value
BAR=value2
ZAP=value3
Run Code Online (Sandbox Code Playgroud)

我想在 shell 脚本中使用这些值作为环境变量。我目前正在使用以下 shell 代码执行此操作:

export $(./produce.sh)
Run Code Online (Sandbox Code Playgroud)

这很有效,除非右侧的值=包含空格。例如:

FOO=split value
Run Code Online (Sandbox Code Playgroud)

我尝试了两种不同的方法produce.sh

  1. 将值括在引号 ( FOO="split value") 中
  2. 使用反斜杠 ( FOO=split\ value)转义空格

这两个都不起作用:如果我检查环境变量,FOO包含"split在第一个示例和split\第二个示例中。

我怎样才能export正确处理这个问题?

shell zsh environment-variables

1
推荐指数
1
解决办法
74
查看次数

Zsh 与 Bash 中的参数扩展:“${VAR,,}”的等价物是什么?

我正在尝试在 macOS (11.4) 上使用 bash/zsh 参数扩展执行大小写修改并犯了一些错误。具体来说,我想获取一个包含字符串的变量并将其转换为蛇形(即: from This is a STRINGto this_is_a_string)。我正在采取小步骤,到目前为止我只是想把所有东西都变成小写,据我所知,这个理论应该是这样的:

$ VAR="StRING"
$ echo "${VAR,,}" # turn the string characters to lowercase
string
Run Code Online (Sandbox Code Playgroud)

这起初不起作用,因为 macOS bash 是非常过时的 3.2.57。我用自制软件安装了当前版本(5.1.8)并且它工作正常。

尽管如此,这不适用于 zsh(最新版本)。我猜这是因为 zsh 中的参数扩展不同,对吗?尽管如此,我还是找不到任何足智多谋的参考资料。我相信 zsh 的工作方式有点不同,更像是sed. 当然,我可以使用tr甚至sed它本身,但我想使用参数扩展。

zsh parameter-expansion

1
推荐指数
1
解决办法
46
查看次数

在 Bash 与 ZSH 中结合 heredoc 和输入重定向

以下代码在 ZSH 上运行没有问题,将 heredoc 与文件 test.csv 的内容相结合:

cat <<EOF <test.csv
id,name,age
EOF
Run Code Online (Sandbox Code Playgroud)

如何在 Bash 中编写相同的命令?

bash zsh heredoc cat io-redirection

1
推荐指数
2
解决办法
40
查看次数