Fish не принимает команды: set: Предупреждение: запись $ PATH недействительна - PullRequest
0 голосов
/ 22 мая 2018

Что-то глупое случилось.Я попытался добавить что-то в файл config.fish, чтобы изменить общесистемную переменную $ PATH.Я знаю, что мне, вероятно, следовало сначала прочитать документацию, но я подумал, что знаю, что делаю.О, хорошо.

Чтобы быть более точным в том, что я сделал: я открыл файл config.fish в / etc / fish и добавил строку export PATH=$PATH:/usr/local/gradle-4.5.1/bin, чтобы добавить gradle к моей переменной PATH.Большая ошибка, потому что теперь моя консоль больше ничего не принимает, и я каждый раз, когда открываю окно консоли, получаю следующее: Мой вопрос: могу ли я как-то отменить изменение без консоли или это единственное решение - переустановка моей ОС?

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

Ответы [ 3 ]

0 голосов
/ 22 мая 2018

То, что вы не осознали или временно забыли, это то, что у рыб PATH на самом деле является массивом.Это не отдельная строка каталогов, разделенная двоеточиями, как в bash.А в рыбе, когда вы объединяете массив в другую строку, вы получаете декартово произведение.Допустим, вы сначала сделали export PATH=/dir1:/dir2 (используя нотацию bash).В рыбах, эквивалентных set -gx PATH /dir1 /dir2, массив var с двумя элементами.Теперь сделайте это

for x in PATH=$PATH:/dir3
    echo $x
end

Как вы думаете, что будет отражено?Это будет отражено:

PATH=/dir1:/dir3
PATH=/dir2:/dir3

И именно поэтому ваш PATH теперь более или менее бесполезен при входе в систему.

Ошибки связаны с вашей функцией fish_prompt, поскольку она можетне найти ни одной из команд, необходимых для создания вашего приглашения.Но вы все равно должны иметь возможность вводить команды.Попробуйте установить свой путь в здравом уме.Просто скопируйте / вставьте это:

set -gx PATH /bin /usr/bin /usr/local/bin

Это должно сделать большинство команд, которые вы используете, снова доступными.Если вашего редактора нет в одном из этих каталогов, включите его каталог.Теперь у вас должна быть возможность редактировать файл config.fish .

PS, не используйте команду export в fish.Это просто функция, которая действует как тонкая оболочка вокруг set.В конечном итоге вам будет лучше научиться делать это по-рыбному.

0 голосов
/ 22 мая 2018

могу ли я как-то отменить изменение без консоли или это единственное решение - переустановка моей ОС?

Переустановка завершена.

Рыба все еще должнапринимать команды, просто в вашем приглашении так много команд, что трудно увидеть вывод.

К счастью, $ PATH во многих дистрибутивах Linux довольно прост, с большинством приложенийв / usr / bin.Так что set -gx PATH /usr/bin должен привести вас в состояние, в котором вы можете отредактировать config.fish, чтобы убрать вашу ошибку.

Или вы можете использовать абсолютные пути в команде fish, например, /usr/bin/sudo /usr/bin/nano /etc/fish/config.fish должен открыть nano с вашим config.fish.

Или вы можете открыть свой config.fish в графическом текстовом редакторе, который имеет возможность редактировать файлы, принадлежащие root (например, Kate просто запрашивает ваш пароль, когда вы пытаетесь сохранить)

ИлиВы можете изменить настройку «shell» или «profile» в своем терминале - им не нужно открывать настроенную оболочку вашего пользователя, они также могут обычно открывать произвольную программу, например другую оболочку.

0 голосов
/ 22 мая 2018

Вы не используете синтаксис bash в конфигурационных файлах fish.В рыбах переменные содержат списки значений.Переменная PATH не является строкой, разделенной двоеточием.

Вы хотите сделать это вместо добавления каталога в список:

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

См. https://fishshell.com/docs/current/tutorial.html#tut_path

...