AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / unix / 问题

问题[fish](unix)

Martin Hope
jsx97
Asked: 2025-03-05 15:58:48 +0800 CST

“set -g” 与 fish shell 上的“set”有何不同?

  • 7

我试图了解该set命令在 fish shell 上是如何工作的。

例如,要删除问候消息,鱼手册建议:

要清空文本,使用默认的问候语功能:

set -U fish_greeting

或者set -g fish_greeting在 config.fish 中。

但为什么建议使用set -g fish_greetinginconfig.fish而不是 just set fish_greeting?这里的实际目的是什么-g?

fish
  • 1 个回答
  • 279 Views
Martin Hope
Bobbymcbobface
Asked: 2024-09-03 05:38:24 +0800 CST

反斜杠后的空格并不表示多行变量定义中的新行(fish shell 脚本)

  • 5

在我开始之前,我知道这可能是最好在 git-hub 上打开的问题,但是;

a. 这只是小事

b. 反斜杠的功能已在之前已关闭的问题中概述,但空格尚未概述(请参阅此处)

c. 作为新用户,我无法在 git-hub 上打开问题

d. 它可以通过谷歌索引帮助新手。

请随意代表我创建一个 git-hub 问题。

考虑以下代码;

# Our fish :)
set fishies \
">('>" \
"><=*>" \
">-<==*>" \
">==(--v-*);->" \
"><>" \
"><(((º>" \
">-<===*>" \
">(̠̄:̠̄ >" \
">><((( ◉ >"
    
# Usage ; set fish (getfish) && echo $fish
function getfish
    # Set our fish to a random item from the "fishies" list
    set -l fish $fishies[(random 1 (count $fishies))]

    # Return our fish to the STDOUT
    echo $fish
end

这很好。但是,如果我们在任何反斜杠(“\__”(用下划线 (_) 表示))后面添加空格,则其下方的行将不会传递给命令set fishes。

这是一个正确的行为吗?是否有关于反斜杠如何工作的文档,因为我只是在修修补补时偶然发现这一点?

重申一下,有人能向我解释为什么会出现这种行为吗?

关于反斜杠,我发现最多的(我认为)是上述 git-hub 问题中的以下代码(但我不完全理解它);

It (the usage of a backslash to form a new-line) has been special cased in tokenizer.cpp:539 :

    if ((*(tok->buff) == L'\\') &&(*(tok->buff+1) == L'\n'))
    {
        tok->last_pos = tok->buff - tok->orig_buff;
        tok->buff+=2;
        tok->last_type = TOK_END;
        return;
    }

如果这篇文章写得幼稚/不好,我深表歉意,因为我是一名新用户,并且不活跃。我想发表一下我的看法,希望能帮助其他遇到同样问题的新手,这是一个很棒的小功能,也是一个很棒的小工具,如果不记录这种行为,那将是一种遗憾,因为它在编写长命令/字符串时非常有用。

fish
  • 1 个回答
  • 33 Views
Martin Hope
David Patterson
Asked: 2024-08-01 22:10:46 +0800 CST

Fish shell:用什么来代替“function --shadow-builtin”

  • 6

我几年前尝试过 fish shell,但由于现在已经忘记的原因而放弃了它(有些事情我无法用它做)。

我再次寻找鱼并尝试更新我的旧脚本以使用最新版本,但遇到了一个问题。

我的一个旧脚本定义了一个带有--shadow-builtin选项的函数。该选项不再存在。什么可以替代其功能?

fish
  • 1 个回答
  • 35 Views
Martin Hope
uilianries
Asked: 2024-04-16 18:32:05 +0800 CST

Fish 需要惰性计算来从列表中删除元素

  • 7

我正在运行 Fish 版本 3.7.0,我想编写一个函数来根据索引从列表中删除元素。

例如,我想从 PATH 环境变量中删除索引 2 处的元素:

set -l variable_name PATH
set -l index 2
set -e $variable_name[$index]

然而,下面的语句不起作用,它返回:

set: --erase: 选项需要一个参数

我发现它需要一些惰性评估来获取变量名称(例如 PATH),但我不知道如何做到这一点。

fish
  • 1 个回答
  • 32 Views
Martin Hope
Tyler B
Asked: 2023-09-07 02:33:04 +0800 CST

完成 gradle 未申请

  • 6

我试图理解为什么 gradle 完成不适用。

由于gw似乎是完成的关键字,我创建了一个别名:

alias gw='./gradlew'

(我的项目使用 gradle 包装器。我没有全局安装 gradle。)

当我输入它时gw <tab>,它只是完成标准文件系统完成。我期待更多类似打字时的事情git <tab>。

我缺少什么?

fish
  • 1 个回答
  • 23 Views
Martin Hope
Naadiyaar
Asked: 2023-06-18 02:24:20 +0800 CST

变量继承自 Fishshell

  • 6

我正在尝试设置一个环境变量编辑器并将其更改为默认值,但由于这种行为 /usr/bin/nano我无法使用鱼常见问题解答set -Ux

如何找出fish继承的是哪个设置?(这样我就可以改变它)

编辑: /etc/environment为空

set -S EDITOR
$EDITOR: set in global scope, exported, with 1 elements
$EDITOR[1]: |/usr/bin/nano|
$EDITOR: set in universal scope, exported, with 1 elements
$EDITOR[1]: |/usr/bin/nvim|
$EDITOR: originally inherited as |/usr/bin/nano|
fish
  • 1 个回答
  • 43 Views
Martin Hope
bogenschlag
Asked: 2023-03-02 21:35:06 +0800 CST

fish 脚本中的错误打开了 ssh 会话的括号粘贴模式?

  • 5

当使用我拼凑的一个小鱼功能(不是这里的开发人员,所以请温柔......?)访问一些经常需要的 ssh 主机时,我看到一个奇怪的效果:括号粘贴模式被激活SSH 会话。

这是脚本:

function mssh

    set hosts host1 host2 host3 hostn
    
    set domain mydomain.com
    set user myusername
    set number (count $hosts)
    set numlength (string length $number)
    
    echo
    echo "Hosts:"
    echo
    for i in (seq $number)
        if test (string length "$i") -lt "$numlength"
            echo \t" "$i")" $hosts[$i]
        else
            echo \t$i")" $hosts[$i]
        end
    end
    echo
    
    while read --nchars $numlength -l response --prompt-str="Please select: "; or return 1
        if test "$response" -le "$number" 2>/dev/null
            ssh $user@$hosts[$response].$domain
            break
        else
            echo "Invalid selection"
            continue
        end
    end
    
end

有了这个,只是为了上下文,我基本上是在尝试重现这个 zsh 脚本的功能(我从某个地方得到的):

#!/bin/zsh

hosts=(host1 host2 host3)
domain="mydomain.com"
user="username"

PS3='Select: '
select host in ${hosts[@]}
do
    if [ "$host" = "" ]; then
        echo "Invalid selection."
    else
        ssh ${user}@${host}.${domain}
        break
    fi
done

但正如我在开头提到的,我自己的脚本在使用它时似乎有些错误,它会为 ssh 会话打开鱼括号粘贴模式,并且我粘贴的所有内容都包含在波浪字符 ( ) 中~paste example~。

它发生在 iTermin2和macOS 终端客户端中。

zsh 脚本不会发生这种情况(或者当我直接调用 ssh 时)。

欢迎任何关于我哪里出错的指示。提前致谢。

fish
  • 1 个回答
  • 20 Views
Martin Hope
Richie Thomas
Asked: 2022-09-12 14:44:42 +0800 CST

鱼壳 - 这种语法有什么问题?

  • 0

我有一个 bash 脚本,它cat是一个 heredoc 字符串,我在鱼壳中运行它,然后将它传递给一个source调用,如下所示:

~/foo/baz:

  1 #!/usr/bin/env bash
  2 
  3 cat << EOS
  4   function bar
  5     echo 'Hello world'
  6   end
  7 EOS

从鱼壳:

richiethomas@richie ~/foo (master) [126]> ./baz | source
richiethomas@richie ~/foo (master)> bar

Hello world

如上所示,这导致bar我运行时可以调用该函数./baz | source。

但是,当我将bar函数的实现更改为以下内容时出现错误:

  1 #!/usr/bin/env bash
  2 
  3 cat << EOS
  4   function bar 
  5     set myVar 5 
  6     switch $myVar 
  7       case 4 
  8         echo '4' 
  9       case 5 
 10         echo '5' 
 11       case '*' 
 12         echo 'Not found' 
 13     end 
 14   end
 15 EOS

当我尝试source这样做时,我收到以下错误:

richiethomas@richie ~/foo (master) [0|1]> ./baz | source
- (line 1): Missing end to balance this function definition
  function bar
  ^
from sourcing file -
source: Error while reading file '<stdin>'

当我将其直接粘贴到鱼壳中时,等效的函数 + switch 语句可以正常工作:

richiethomas@richie ~/foo (master) [0|1]> function bar
                                              set myVar 5
                                              switch $myVar
                                                  case 4
                                                      echo 'it is 4!'
                                                  case 5
                                                      echo 'it is 5!'
                                                  case '*'
                                                      echo 'not found'
                                              end
                                          end

richiethomas@richie ~/foo (master)> bar

it is 5!

我end在文件和复制/粘贴到 shell 中的代码中都有相同的语句数baz,所以我怀疑错误语句是红鲱鱼?如果是这样,我不知道真正的错误可能是什么。

我的目标是能够在 bash 脚本的 heredoc 字符串中构造一个 fish 函数,然后从 fish 脚本中获取该 bash 脚本,以便我可以调用该函数。我在这里哪里做错了?

fish
  • 1 个回答
  • 39 Views
Martin Hope
Richie Thomas
Asked: 2022-09-11 12:54:33 +0800 CST

Fish shell - 用于创建检查值数组的 switch 语句的语法

  • 1

我正在研究 RBENV 代码库,我看到在文件的第 116 行rbenv-init,创建了一个包含switch语句的函数。我的假设是我们检查变量的值是否是(复数)变量command中值数组的成员之一。commands如果是,我们执行 switch 语句的分支 1。否则,我们执行分支 2。

我想写一个简单的脚本来测试我的假设,所以我写了以下内容:

#!/usr/bin/env fish

set command "foo"

switch $command
case ${argv[*]} 
  echo "command in args"
case "*" 
  echo "command not found"
end

但是,当我运行此脚本时,出现以下错误:

$ ./foo bar baz

./foo (line 6): ${ is not a valid variable in fish.
case ${argv[*]} 
      ^
warning: Error while reading file ./foo

我期待评估一个包含andargv的数组,因为这是我提供给脚本的两个参数。我的语法与源代码(即)中第 117 行的语法相匹配。barbazcase ${commands[*]}

我在其中执行脚本的外壳是 zsh v5.8.1,但是我的 shebang 专门引用了“鱼”外壳,所以我认为我的外壳无关紧要。我已经安装了鱼 v3.5.1,fwiw。

fish
  • 1 个回答
  • 36 Views
Martin Hope
amordo
Asked: 2022-07-04 03:57:12 +0800 CST

如何在鱼壳中切换语言?

  • 0

我尝试使用 切换fish 中的语言(例如,shell 支持的法语)sudo dpkg-reconfigure locales,但没有任何改变。
导出LANG变量做set --global --export LANG fr_FR.UTF-8和启动子鱼实例也没有效果。locale输出是:

LANG=fr_FR.UTF-8
LANGUAGE=
LC_CTYPE="fr_FR.UTF-8"
LC_NUMERIC="fr_FR.UTF-8"
LC_TIME="fr_FR.UTF-8"
LC_COLLATE="fr_FR.UTF-8"
LC_MONETARY="fr_FR.UTF-8"
LC_MESSAGES="fr_FR.UTF-8"
LC_PAPER="fr_FR.UTF-8"
LC_NAME="fr_FR.UTF-8"
LC_ADDRESS="fr_FR.UTF-8"
LC_TELEPHONE="fr_FR.UTF-8"
LC_MEASUREMENT="fr_FR.UTF-8"
LC_IDENTIFICATION="fr_FR.UTF-8"
LC_ALL=

更改鱼壳语言需要哪些操作?

fish
  • 1 个回答
  • 52 Views

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    模块 i915 可能缺少固件 /lib/firmware/i915/*

    • 3 个回答
  • Marko Smith

    无法获取 jessie backports 存储库

    • 4 个回答
  • Marko Smith

    如何将 GPG 私钥和公钥导出到文件

    • 4 个回答
  • Marko Smith

    我们如何运行存储在变量中的命令?

    • 5 个回答
  • Marko Smith

    如何配置 systemd-resolved 和 systemd-networkd 以使用本地 DNS 服务器来解析本地域和远程 DNS 服务器来解析远程域?

    • 3 个回答
  • Marko Smith

    dist-upgrade 后 Kali Linux 中的 apt-get update 错误 [重复]

    • 2 个回答
  • Marko Smith

    如何从 systemctl 服务日志中查看最新的 x 行

    • 5 个回答
  • Marko Smith

    Nano - 跳转到文件末尾

    • 8 个回答
  • Marko Smith

    grub 错误:你需要先加载内核

    • 4 个回答
  • Marko Smith

    如何下载软件包而不是使用 apt-get 命令安装它?

    • 7 个回答
  • Martin Hope
    user12345 无法获取 jessie backports 存储库 2019-03-27 04:39:28 +0800 CST
  • Martin Hope
    Carl 为什么大多数 systemd 示例都包含 WantedBy=multi-user.target? 2019-03-15 11:49:25 +0800 CST
  • Martin Hope
    rocky 如何将 GPG 私钥和公钥导出到文件 2018-11-16 05:36:15 +0800 CST
  • Martin Hope
    Evan Carroll systemctl 状态显示:“状态:降级” 2018-06-03 18:48:17 +0800 CST
  • Martin Hope
    Tim 我们如何运行存储在变量中的命令? 2018-05-21 04:46:29 +0800 CST
  • Martin Hope
    Ankur S 为什么 /dev/null 是一个文件?为什么它的功能不作为一个简单的程序来实现? 2018-04-17 07:28:04 +0800 CST
  • Martin Hope
    user3191334 如何从 systemctl 服务日志中查看最新的 x 行 2018-02-07 00:14:16 +0800 CST
  • Martin Hope
    Marko Pacak Nano - 跳转到文件末尾 2018-02-01 01:53:03 +0800 CST
  • Martin Hope
    Kidburla 为什么真假这么大? 2018-01-26 12:14:47 +0800 CST
  • Martin Hope
    Christos Baziotis 在一个巨大的(70GB)、一行、文本文件中替换字符串 2017-12-30 06:58:33 +0800 CST

热门标签

linux bash debian shell-script text-processing ubuntu centos shell awk ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve