标签: zsh

在 zsh 中将别名更改为 python3

我正在使用 zsh shell 并且我正在尝试更改我的 mac 中的默认 python,它目前是 python2。

我得到以下信息:

? alias python = 'python3'
zsh: bad assignment
Run Code Online (Sandbox Code Playgroud)

为什么会发生?

terminal zsh python-3.x

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

将正则表达式从 bash 翻译成 zsh

我最近将 macOS 更新到了新的 Catalina 版本,并按照建议从 bash 切换到了 zsh。问题是在我的工作流程中我们做了一些需要正则表达式的文件操作,我不知道如何让它与 zsh 一起工作。

这是我的两个正则表达式:

ls | grep ^[0-9].*.chunk.js$
ls | grep ^main.*.chunk.js$
Run Code Online (Sandbox Code Playgroud)

它们应该匹配以下文件:main.d9a85e98.chunk.js2.c2cbac0f.chunk.js

任何想法或资源?

谢谢!

regex bash zsh macos-catalina

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

每次执行命令时使 zsh 提示更新

TLDR;

我需要一种.zshrc在每次执行命令时自动获取源的方法。PROMPT每次执行命令时都需要更新,以便在提示中显示相关信息。

原因

我使用Watson cli来跟踪时间。在我之前的 bash 设置中,我在提示符 ( $PS1)前面加上了一个符号,指示计时器是否正在运行(红色/绿色)。我用 Oh My Zsh 模仿了这个功能,如下(在主题文件中):

WATSON_DIR="$HOME/Library/Application Support/watson"
watson_status() {
    local txtred="${fg_bold[red]}"
    local txtgrn="${fg_bold[green]}"
    local txtrst="${reset_color}"

    # Started
    local status_color="$txtgrn"

    # Stopped
    if [[ $(cat "$WATSON_DIR/state") == '{}' ]]; then
        status_color="$txtred"
    fi
    echo -e "$status_color""?""$txtrst"
}

PROMPT="??? %{$(watson_status) $fg_bold[green]%}%~%{$reset_color%}$(git_prompt_info) ? %{$FG[130]%}%*%{$reset_color%}
??? $ "
Run Code Online (Sandbox Code Playgroud)

当前的问题

该图标将指示 .zshrc 执行时状态的颜色。例如,如果计时器正在运行并且图标正确指示为绿色,则停止计时器不会导致图标变为红色。为了看到图标改变颜色,我必须获取 .zshrc。

这表示watson_status()每次执行命令时都需要运行该函数,以给出命令执行时的最新状态

zsh oh-my-zsh

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

在Bash中,每一段“${BASH_SOURCE:-${(%):-%x}}”是什么意思

最近我想知道在 Bash 中获取当前正在运行的脚本/文件的路径的最佳方法。

我找到了很多答案。特别是其中之一是:

"${BASH_SOURCE:-${(%):-%x}}"
Run Code Online (Sandbox Code Playgroud)

我记得当时决定这是满足我需求的最佳解决方案。现在我正在努力记住为什么。我知道一些片段的意思,但不是全部。即使有了我所知道的,我也不能把它们放在一起来理解它。有用。但为什么?

我为在网络上的任何地方找到这个特定代码所做的一切努力(包括搜索它的一部分)都失败了,所以我无法找到我最初找到它的地方。

谁能告诉我每件作品的含义(甚至可以说明为什么我可能会选择这个而不是其他答案)?

谢谢!


第二天更新:@rici 的精彩回答(和评论)解释了一切,包括我选择它的原因。

似乎我选择了整个表达式来使我正在使用它的源文件能够在 bash 和 zsh 中可靠地使用 - 这是一个目标。使用双重替换,整个表达式在任一 shell 中得到相同的答案。

解释了为什么我无法理解(或通过谷歌找到任何合理的)bash 中的 ${(%):-%x} 部分,因为......好吧......它在 bash 中没有多大意义,哈哈,因为它是为 zsh 设计的。出于这个原因,我现在为此添加了一个 zsh 标签。


一个小时后的第二次更新,以防这对任何人有帮助:我现在已经找到了:

${BASH_SOURCE[0]} 在 zsh 中等效?

...这是我${(%):-%x}最初从哪里得到的,最值得注意的是这个特定的答案:

/sf/answers/1983553141/

bash zsh

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

如何在bash中获得递归别名?

aliases由于处理一些拼写错误,我有多个别名为一个公共别名。请注意,我用whichzshtypebash

例如:

alias netlab="ssh user@IP_ADDRESS"
alias n=netlab
alias ne=netlab
alias net=netlab
alias nn=netlab
Run Code Online (Sandbox Code Playgroud)

当我尝试获取别名的类型时,我得到以下信息:

$ which -sa n  # in ZSH-shell
n: aliased to netlab

$ type n  # in BASH-shell
n is an alias for netlab
Run Code Online (Sandbox Code Playgroud)

既然netlab也有别名,我也能得到它吗?所以基本上,我想which program递归应用。

我想要的示例输出:

$ type n  # in BASH-shell 
n: aliased to netlab
netlab: aliased to ssh user@IP_ADDRESS
Run Code Online (Sandbox Code Playgroud)

或者只是返回其最新的别名:

$ type n
n: aliased to ssh user@IP_ADDRESS
Run Code Online (Sandbox Code Playgroud)

linux bash shell alias zsh

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

xcrun:错误:无效的活动开发者路径,zsh 更新后出现flutter 问题

我将我的 shell 更新为 zsh,当我输入 flutter --version 时,我得到了这个:

'''xcrun: error: invalid active developer path (/Library/Developer/CommandLineTools),   
missing xcrun at: /Library/Developer/CommandLineTools/usr/bin/xcrun
Failed to find the latest git commit date: VersionCheckError: Command exited
with code 1: git -c log.showSignature=false log -n 1 --pretty=format:%ad
--date=iso
Standard out: 
Standard error: xcrun: error: invalid active developer path
(/Library/Developer/CommandLineTools), missing xcrun at:
/Library/Developer/CommandLineTools/usr/bin/xcrun

Returning 1970-01-01 01:00:00.000 instead.
Flutter 0.0.0-unknown • channel unknown • unknown source
Framework • revision  () • 1970-01-01 01:00:00.000
Engine • revision b8752bbfff
Tools • …
Run Code Online (Sandbox Code Playgroud)

error-handling zsh zshrc xcrun flutter

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

env 不工作,但 echo 显示变量

完全被这种行为弄糊涂了。

env不显示变量,而是echo显示它。

我经常使用 .env 文件导入测试,env | grep VAR但不知何故,它在我获取它后没有立即显示。这让我思考。

这是我用来解决问题的步骤。

$ cat >.env
TARXAN=wat
^D
$ . .env
$ echo $TARXAN
wat
$ env | grep TARXAN

$
Run Code Online (Sandbox Code Playgroud)

我有 oh-my-zsh 的 zsh。没有启用任何 dotenv 插件。将不胜感激任何帮助。我在 kubuntu 20.04。

我还在 xterm 中测试了整个设置。相同的结果。

bash shell zsh environment-variables

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

我如何使用 zsh 'command' 选项来执行内置的 'source' 命令?

每次我的 shell 获取文件时,我都试图记录。我正在使用 zsh,所以我进入了 zshenv 并添加了这个功能。

source() {
    echo "sourcing $1"
    command source $1
}
Run Code Online (Sandbox Code Playgroud)

这个想法是每次“源 [文件]”出现在我的一个点文件中并被执行时,它应该先将操作打印到终端,然后再实际获取文件。

相反,我收到了一些这样的错误

sourcing /Users/js/.cargo/env
source:2: command not found: source
sourcing /Users/js/.sources/postgres-env.sh
source:2: command not found: source
sourcing /Users/js/.oh-my-zsh/oh-my-zsh.sh
source:2: command not found: source
sourcing /Users/js/.iterm2_shell_integration.zsh
source:2: command not found: source
Run Code Online (Sandbox Code Playgroud)

在这里使用带有 zsh 的 shell 'command' 选项来调用 source 的正确方法是什么?

zsh

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

如何计算只有 1 个字符的行数?

我试图只打印只有 1 个字符的行数。

我有一个 20 万行的文件,其中一些行只有一个字符(任何类型的字符)

由于我没有经验,我在谷歌上搜索了很多并抓取了文档,并从不同来源提出了这个混合解决方案:

awk -F^\w$ '{print NF-1}' myfile.log
Run Code Online (Sandbox Code Playgroud)

我原以为会过滤带有单个字符的行,这似乎有效

^\w$
Run Code Online (Sandbox Code Playgroud)

但是我没有得到包含单个字符的行数。而是这样的:在此处输入图片说明

linux bash zsh

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

如何复制文件并将数字替换为X?

我在 home/files/file.txt 中有文件

其内容混合了字母和数字

SDA212 
123DD2
31dD
Run Code Online (Sandbox Code Playgroud)

我想将文件复制到其他目录,同时用 X 字母替换数值?我有什么办法可以做到这一点?

linux bash zsh

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