全部,
尽管我对 bash 感到厌恶,但我想我应该尝试一下 zsh,它似乎被很好地谈论。所以,我立刻就遇到了这堵砖墙:
function z
{
var="ls -l"
"$var"
}
Run Code Online (Sandbox Code Playgroud)
在 bash 中执行“ls -l”,在 zsh 中它给我“找不到命令:ls -l”,因为我对 zsh 完全陌生,所以我不知道它和 bash 之间可能有什么不同,这会导致多于。
我们在服务器上使用 Bash 作为默认 shell,但我们中的一些人更喜欢 zsh,因此我们寻找一种方法来自动设置 ZSH。
chsh 到 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) 我刚刚将 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)
关于为什么会出现这种情况有什么建议吗?
我在学习 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) 我目前正在从 csh 切换到 zsh,我正在编写一个 .zshrc 试图获取我在这个新 shell 中习惯的所有选项。
我使用 autocd (进入一个目录,只需输入其名称(无需 cd 命令),我想知道我的第一个是否可能建议当前目录中存在的所有文件(就像它在 csh 中工作一样)。
我非常习惯这种方式,在输入我的命令之前,先按一下我可以打开的文件或我可以“autocd”进入的目录的概述,而无需在命令行中编写任何内容。
现在,当我第一次按下它时,它不会触发任何完成机制,但它只是写入一个实际的表格。
我还没有找到任何解决方案,如果有人有任何神奇的选择来获得这个结果,请随时启发我!
谢谢
我经常发现自己想要重复一个命令,虽然!!很有用,但我想将其绑定到 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) 我有一个 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:
FOO="split value") 中FOO=split\ value)转义空格这两个都不起作用:如果我检查环境变量,FOO包含"split在第一个示例和split\第二个示例中。
我怎样才能export正确处理这个问题?
我正在尝试在 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 上运行没有问题,将 heredoc 与文件 test.csv 的内容相结合:
cat <<EOF <test.csv
id,name,age
EOF
Run Code Online (Sandbox Code Playgroud)
如何在 Bash 中编写相同的命令?