Fish不接受命令:set:警告:$PATH条目无效

Fish不接受命令:set:警告:$PATH条目无效,path,ubuntu-16.04,fish,Path,Ubuntu 16.04,Fish,发生了一些愚蠢的事情。我试图在config.fish文件中添加一些内容来更改系统范围内的$PATH变量。我知道,我可能应该先阅读文档,但我想我知道我在做什么。哦,好吧 更具体地说,我在/etc/fish中打开了config.fish文件,并添加了行export PATH=$PATH:/usr/local/gradle-4.5.1/bin,将gradle添加到我的路径变量中。大错误,因为现在我的控制台不再接受任何东西,每当我打开控制台窗口时,我都会得到以下信息:我现在的问题是:我可以在没有控制台的

发生了一些愚蠢的事情。我试图在config.fish文件中添加一些内容来更改系统范围内的$PATH变量。我知道,我可能应该先阅读文档,但我想我知道我在做什么。哦,好吧

更具体地说,我在/etc/fish中打开了config.fish文件,并添加了行
export PATH=$PATH:/usr/local/gradle-4.5.1/bin
,将gradle添加到我的路径变量中。大错误,因为现在我的控制台不再接受任何东西,每当我打开控制台窗口时,我都会得到以下信息:我现在的问题是:我可以在没有控制台的情况下以某种方式还原更改,还是唯一的解决方案是重新安装我的操作系统

set: Warning: $PATH entry "/home/david/.local/bin" is not valid (Datei oder Verzeichnis nicht gefunden)
/usr/share/fish/functions/__fish_pwd.fish (Zeile 1): 
uname
^
Befehlsersetzungsblock
    called on line -1 of file /usr/share/fish/functions/__fish_pwd.fish

from sourcing file /usr/share/fish/functions/__fish_pwd.fish
    called on standard input

Befehlsersetzungsblock
    called on standard input

Befehlsersetzungsblock
    called on standard input

/usr/share/fish/functions/__fish_pwd.fish (Zeile 1): switch: Erwartete genau ein Argument, erhielt 0

switch (uname)
       ^
from sourcing file /usr/share/fish/functions/__fish_pwd.fish
    called on standard input

Befehlsersetzungsblock
    called on standard input

Befehlsersetzungsblock
    called on standard input

fish: 
echo $_ " "; __fish_pwd
             ^
Befehlsersetzungsblock
    called on standard input

~/.config/fish/functions/fish_greeting.fish (Zeile 1): 
set fish_greeting | figlet -f lean "Hi  David"
                    ^
Unbekannte Funktion 'fish_greeting'
    called on line 142 of file /usr/share/fish/functions/__fish_config_interactive.fish

Unbekannte Funktion '__fish_config_interactive'
    called on line 216 of file /usr/share/fish/config.fish

Unbekannte Funktion '__fish_on_interactive'
    called on standard input

in event handler: handler for generic event 'fish_prompt'

Befehl »tty« ist unter »/usr/bin/tty« verfügbar
Der Befehl konnte nicht gefunden werden, weil »/usr/bin« nicht Teil der Umgebungsvariable PATH ist.
tty: Befehl nicht gefunden.
~/.config/fish/functions/fish_prompt.fish (Zeile 3): 
    tty | string match -q -r tty
    ^
Unbekannte Funktion 'fish_prompt'
    called on standard input

Befehlsersetzungsblock
    called on standard input

Befehl »hostname« ist unter »/bin/hostname« verfügbar
Der Befehl konnte nicht gefunden werden, weil »/bin« nicht Teil der Umgebungsvariable PATH ist.
hostname: Befehl nicht gefunden.
/usr/share/fish/functions/prompt_hostname.fish (Zeile 1): 
hostname | string split '.'
^
Befehlsersetzungsblock
    called on line -1 of file /usr/share/fish/functions/prompt_hostname.fish

from sourcing file /usr/share/fish/functions/prompt_hostname.fish
    called on line 2 of file ~/.config/fish/functions/fish_prompt.fish

Befehlsersetzungsblock
    called on line 0 of file ~/.config/fish/functions/fish_prompt.fish

Befehlsersetzungsblock
    called on line 0 of file ~/.config/fish/functions/fish_prompt.fish

Unbekannte Funktion 'fish_prompt'
    called on standard input

Befehlsersetzungsblock
    called on standard input

Befehl »sed« ist unter »/bin/sed« verfügbar
Der Befehl konnte nicht gefunden werden, weil »/bin« nicht Teil der Umgebungsvariable PATH ist.
sed: Befehl nicht gefunden.
~/.config/fish/functions/fish_prompt.fish (Zeile 1): 
pwd|sed "s=$HOME=~="
    ^
Befehlsersetzungsblock
    called on line 0 of file ~/.config/fish/functions/fish_prompt.fish

Unbekannte Funktion 'fish_prompt'
    called on standard input

Befehlsersetzungsblock
    called on standard input

Befehl »date« ist unter »/bin/date« verfügbar
Der Befehl konnte nicht gefunden werden, weil »/bin« nicht Teil der Umgebungsvariable PATH ist.
date: Befehl nicht gefunden.
~/.config/fish/functions/fish_prompt.fish (Zeile 1): 
date +%X
^
Befehlsersetzungsblock
    called on line 0 of file ~/.config/fish/functions/fish_prompt.fish

Unbekannte Funktion 'fish_prompt'
    called on standard input

Befehlsersetzungsblock
    called on standard input

__fish_pwd: Befehl nicht gefunden.
fish: 
echo $_ " "; __fish_pwd
             ^
Befehlsersetzungsblock
    called on standard input

在fish配置文件中不使用bash语法。在fish中,变量包含值列表。PATH变量不是以冒号分隔的字符串

您希望执行此操作以将目录附加到列表:

set PATH $PATH /usr/local/gradle-4.5.1/bin

请参见

在fish配置文件中不使用bash语法。在fish中,变量包含值列表。PATH变量不是以冒号分隔的字符串

您希望执行此操作以将目录附加到列表:

set PATH $PATH /usr/local/gradle-4.5.1/bin

请看

您没有意识到或暂时忘记的是,在fish
中,PATH
实际上是一个数组。它不像bash中那样是一个以冒号分隔的目录字符串。在fish中,当你将一个数组连接到另一个字符串时,你会得到一个笛卡尔乘积。假设您首先执行了
导出路径=/dir1:/dir2
(使用bash表示法)。在相当于
set-gx PATH/dir1/dir2
的fish中,包含两个元素的数组变量。现在做这个

for x in PATH=$PATH:/dir3
    echo $x
end
你认为会有什么反响?这将得到回应:

PATH=/dir1:/dir3
PATH=/dir2:/dir3
这就是为什么当你登录时,你的
路径现在或多或少是无用的

错误来自
fish\u提示符
函数,因为它找不到构造提示符所需的任何命令。但您应该仍然能够输入命令。尝试将路径设置为sane值。只需复制/粘贴以下内容:

set -gx PATH /bin /usr/bin /usr/local/bin
这将使您使用的大多数命令可以再次访问。如果您的编辑器不在其中一个目录中,也包括它的目录。现在您应该可以编辑config.fish文件了


另外,不要在fish中使用
export
命令。它只是一个充当
set
薄包装器的函数。从长远来看,你最好学会用鱼的方式。你没有意识到,或者暂时忘记的是,鱼的路径实际上是一个数组。它不像bash中那样是一个以冒号分隔的目录字符串。在fish中,当你将一个数组连接到另一个字符串时,你会得到一个笛卡尔乘积。假设您首先执行了
导出路径=/dir1:/dir2
(使用bash表示法)。在相当于
set-gx PATH/dir1/dir2
的fish中,包含两个元素的数组变量。现在做这个

for x in PATH=$PATH:/dir3
    echo $x
end
你认为会有什么反响?这将得到回应:

PATH=/dir1:/dir3
PATH=/dir2:/dir3
这就是为什么当你登录时,你的
路径现在或多或少是无用的

错误来自
fish\u提示符
函数,因为它找不到构造提示符所需的任何命令。但您应该仍然能够输入命令。尝试将路径设置为sane值。只需复制/粘贴以下内容:

set -gx PATH /bin /usr/bin /usr/local/bin
这将使您使用的大多数命令可以再次访问。如果您的编辑器不在其中一个目录中,也包括它的目录。现在您应该可以编辑config.fish文件了

另外,不要在fish中使用
export
命令。它只是一个充当
set
薄包装器的函数。从长远来看,你最好学会用鱼的方式来做

我是否可以在没有控制台的情况下以某种方式还原更改,或者唯一的解决方案是重新安装操作系统

set: Warning: $PATH entry "/home/david/.local/bin" is not valid (Datei oder Verzeichnis nicht gefunden)
/usr/share/fish/functions/__fish_pwd.fish (Zeile 1): 
uname
^
Befehlsersetzungsblock
    called on line -1 of file /usr/share/fish/functions/__fish_pwd.fish

from sourcing file /usr/share/fish/functions/__fish_pwd.fish
    called on standard input

Befehlsersetzungsblock
    called on standard input

Befehlsersetzungsblock
    called on standard input

/usr/share/fish/functions/__fish_pwd.fish (Zeile 1): switch: Erwartete genau ein Argument, erhielt 0

switch (uname)
       ^
from sourcing file /usr/share/fish/functions/__fish_pwd.fish
    called on standard input

Befehlsersetzungsblock
    called on standard input

Befehlsersetzungsblock
    called on standard input

fish: 
echo $_ " "; __fish_pwd
             ^
Befehlsersetzungsblock
    called on standard input

~/.config/fish/functions/fish_greeting.fish (Zeile 1): 
set fish_greeting | figlet -f lean "Hi  David"
                    ^
Unbekannte Funktion 'fish_greeting'
    called on line 142 of file /usr/share/fish/functions/__fish_config_interactive.fish

Unbekannte Funktion '__fish_config_interactive'
    called on line 216 of file /usr/share/fish/config.fish

Unbekannte Funktion '__fish_on_interactive'
    called on standard input

in event handler: handler for generic event 'fish_prompt'

Befehl »tty« ist unter »/usr/bin/tty« verfügbar
Der Befehl konnte nicht gefunden werden, weil »/usr/bin« nicht Teil der Umgebungsvariable PATH ist.
tty: Befehl nicht gefunden.
~/.config/fish/functions/fish_prompt.fish (Zeile 3): 
    tty | string match -q -r tty
    ^
Unbekannte Funktion 'fish_prompt'
    called on standard input

Befehlsersetzungsblock
    called on standard input

Befehl »hostname« ist unter »/bin/hostname« verfügbar
Der Befehl konnte nicht gefunden werden, weil »/bin« nicht Teil der Umgebungsvariable PATH ist.
hostname: Befehl nicht gefunden.
/usr/share/fish/functions/prompt_hostname.fish (Zeile 1): 
hostname | string split '.'
^
Befehlsersetzungsblock
    called on line -1 of file /usr/share/fish/functions/prompt_hostname.fish

from sourcing file /usr/share/fish/functions/prompt_hostname.fish
    called on line 2 of file ~/.config/fish/functions/fish_prompt.fish

Befehlsersetzungsblock
    called on line 0 of file ~/.config/fish/functions/fish_prompt.fish

Befehlsersetzungsblock
    called on line 0 of file ~/.config/fish/functions/fish_prompt.fish

Unbekannte Funktion 'fish_prompt'
    called on standard input

Befehlsersetzungsblock
    called on standard input

Befehl »sed« ist unter »/bin/sed« verfügbar
Der Befehl konnte nicht gefunden werden, weil »/bin« nicht Teil der Umgebungsvariable PATH ist.
sed: Befehl nicht gefunden.
~/.config/fish/functions/fish_prompt.fish (Zeile 1): 
pwd|sed "s=$HOME=~="
    ^
Befehlsersetzungsblock
    called on line 0 of file ~/.config/fish/functions/fish_prompt.fish

Unbekannte Funktion 'fish_prompt'
    called on standard input

Befehlsersetzungsblock
    called on standard input

Befehl »date« ist unter »/bin/date« verfügbar
Der Befehl konnte nicht gefunden werden, weil »/bin« nicht Teil der Umgebungsvariable PATH ist.
date: Befehl nicht gefunden.
~/.config/fish/functions/fish_prompt.fish (Zeile 1): 
date +%X
^
Befehlsersetzungsblock
    called on line 0 of file ~/.config/fish/functions/fish_prompt.fish

Unbekannte Funktion 'fish_prompt'
    called on standard input

Befehlsersetzungsblock
    called on standard input

__fish_pwd: Befehl nicht gefunden.
fish: 
echo $_ " "; __fish_pwd
             ^
Befehlsersetzungsblock
    called on standard input
重新安装是完全的过度使用

Fish仍然应该接受命令,只是提示中的命令太多,很难看到输出

谢天谢地,许多Linux发行版上的$PATH非常简单,大多数应用程序都在/usr/bin中。因此,
set-gxpath/usr/bin
应该会让您进入一种状态,您可以编辑config.fish来删除错误

或者您可以在fish命令中使用绝对路径,例如,
/usr/bin/sudo/usr/bin/nano/etc/fish/config.fish
应使用config.fish打开nano

或者,您可以在图形文本编辑器中打开config.fish,该编辑器可以编辑根用户拥有的文件(例如,Kate在尝试保存时只要求输入密码)

或者,您可以更改终端中的“shell”或“profile”设置-它们不需要打开用户配置的shell,它们通常也可以打开任意程序,比如不同的shell

我是否可以在没有控制台的情况下以某种方式还原更改,或者唯一的解决方案是重新安装操作系统

set: Warning: $PATH entry "/home/david/.local/bin" is not valid (Datei oder Verzeichnis nicht gefunden)
/usr/share/fish/functions/__fish_pwd.fish (Zeile 1): 
uname
^
Befehlsersetzungsblock
    called on line -1 of file /usr/share/fish/functions/__fish_pwd.fish

from sourcing file /usr/share/fish/functions/__fish_pwd.fish
    called on standard input

Befehlsersetzungsblock
    called on standard input

Befehlsersetzungsblock
    called on standard input

/usr/share/fish/functions/__fish_pwd.fish (Zeile 1): switch: Erwartete genau ein Argument, erhielt 0

switch (uname)
       ^
from sourcing file /usr/share/fish/functions/__fish_pwd.fish
    called on standard input

Befehlsersetzungsblock
    called on standard input

Befehlsersetzungsblock
    called on standard input

fish: 
echo $_ " "; __fish_pwd
             ^
Befehlsersetzungsblock
    called on standard input

~/.config/fish/functions/fish_greeting.fish (Zeile 1): 
set fish_greeting | figlet -f lean "Hi  David"
                    ^
Unbekannte Funktion 'fish_greeting'
    called on line 142 of file /usr/share/fish/functions/__fish_config_interactive.fish

Unbekannte Funktion '__fish_config_interactive'
    called on line 216 of file /usr/share/fish/config.fish

Unbekannte Funktion '__fish_on_interactive'
    called on standard input

in event handler: handler for generic event 'fish_prompt'

Befehl »tty« ist unter »/usr/bin/tty« verfügbar
Der Befehl konnte nicht gefunden werden, weil »/usr/bin« nicht Teil der Umgebungsvariable PATH ist.
tty: Befehl nicht gefunden.
~/.config/fish/functions/fish_prompt.fish (Zeile 3): 
    tty | string match -q -r tty
    ^
Unbekannte Funktion 'fish_prompt'
    called on standard input

Befehlsersetzungsblock
    called on standard input

Befehl »hostname« ist unter »/bin/hostname« verfügbar
Der Befehl konnte nicht gefunden werden, weil »/bin« nicht Teil der Umgebungsvariable PATH ist.
hostname: Befehl nicht gefunden.
/usr/share/fish/functions/prompt_hostname.fish (Zeile 1): 
hostname | string split '.'
^
Befehlsersetzungsblock
    called on line -1 of file /usr/share/fish/functions/prompt_hostname.fish

from sourcing file /usr/share/fish/functions/prompt_hostname.fish
    called on line 2 of file ~/.config/fish/functions/fish_prompt.fish

Befehlsersetzungsblock
    called on line 0 of file ~/.config/fish/functions/fish_prompt.fish

Befehlsersetzungsblock
    called on line 0 of file ~/.config/fish/functions/fish_prompt.fish

Unbekannte Funktion 'fish_prompt'
    called on standard input

Befehlsersetzungsblock
    called on standard input

Befehl »sed« ist unter »/bin/sed« verfügbar
Der Befehl konnte nicht gefunden werden, weil »/bin« nicht Teil der Umgebungsvariable PATH ist.
sed: Befehl nicht gefunden.
~/.config/fish/functions/fish_prompt.fish (Zeile 1): 
pwd|sed "s=$HOME=~="
    ^
Befehlsersetzungsblock
    called on line 0 of file ~/.config/fish/functions/fish_prompt.fish

Unbekannte Funktion 'fish_prompt'
    called on standard input

Befehlsersetzungsblock
    called on standard input

Befehl »date« ist unter »/bin/date« verfügbar
Der Befehl konnte nicht gefunden werden, weil »/bin« nicht Teil der Umgebungsvariable PATH ist.
date: Befehl nicht gefunden.
~/.config/fish/functions/fish_prompt.fish (Zeile 1): 
date +%X
^
Befehlsersetzungsblock
    called on line 0 of file ~/.config/fish/functions/fish_prompt.fish

Unbekannte Funktion 'fish_prompt'
    called on standard input

Befehlsersetzungsblock
    called on standard input

__fish_pwd: Befehl nicht gefunden.
fish: 
echo $_ " "; __fish_pwd
             ^
Befehlsersetzungsblock
    called on standard input
重新安装是完全的过度使用

Fish仍然应该接受命令,只是提示中的命令太多,很难看到输出

谢天谢地,许多Linux发行版上的$PATH非常简单,大多数应用程序都在/usr/bin中。因此,
set-gxpath/usr/bin
应该会让您进入一种状态,您可以编辑config.fish来删除错误

或者您可以在fish命令中使用绝对路径,例如,
/usr/bin/sudo/usr/bin/nano/etc/fish/config.fish
应使用config.fish打开nano

或者,您可以在图形文本编辑器中打开config.fish,该编辑器可以编辑根用户拥有的文件(例如,Kate在尝试保存时只要求输入密码)


或者,您可以更改终端中的“shell”或“profile”设置-它们不需要打开用户配置的shell,它们通常也可以打开任意程序,比如不同的shell

这就是我在检查t之后学到的