Что эквивалентно $ {var: -defaultvalue} в рыбе? - PullRequest
0 голосов
/ 06 февраля 2019

Здравствуйте, я пытаюсь перевести мой .bashrc в формат fish, почти готов, в основном это ясно из документации, но эта часть вызывает у меня головную боль ... так что мой gnupg работает с моим yubikey ssh и т. Д. И т. Д. Рыба версиясамое последнее 3.0 под Arch GNU / Linux

оригинал на BASH:

# Set SSH to use gpg-agent
unset SSH_AGENT_PID
if [ "${gnupg_SSH_AUTH_SOCK_by:-0}" -ne $$ ]; then
  export SSH_AUTH_SOCK="/run/user/$UID/gnupg/S.gpg-agent.ssh"
fi
echo "UPDATESTARTUPTTY" | gpg-connect-agent > /dev/null 2&>1

Моя половина превращена в рыбу:

set -e SSH_AGENT_PID
if [ "${gnupg_SSH_AUTH_SOCK_by:-0}" -ne $$ ]
  set -x  SSH_AUTH_SOCK="/run/user/$UID/gnupg/S.gpg-agent.ssh"
end
echo "UPDATESTARTUPTTY" | gpg-connect-agent > /dev/null 2>&1

так, как вы видите выше, у меня такдалеко преобразил stdin и stderror pine и переменную unset с set -e, ошибка, которую я имею, немного более неясна для меня:

~/.config/fish/config.fish (line 33): ${ is not a valid variable in fish.
if [ "${gnupg_SSH_AUTH_SOCK_by:-0}" -ne $$ ]
       ^
from sourcing file ~/.config/fish/config.fish
        called during startup

Любая помощь будет высоко оценена, BTW будет хорошим переносом.тоже :) есть ли там?

[edit] хорошо, все заработало благодаря ответу ниже, теперь вся моя среда bash, профиль, bashrc и т. Д. Переведены в fish и используют его исключительно в качестве оболочки 100%

Ответы [ 2 ]

0 голосов
/ 06 февраля 2019

Вы не должны менять свою оболочку входа в систему, пока у вас не будет намного лучшего понимания синтаксиса и поведения рыбы.Например, для рыбы эквивалент $$ равен %self или $fish_pid в зависимости от того, какую версию рыбы вы используете.Вы всегда должны указывать версию программы, с которой у вас проблемы.

Предполагается, что вы используете fish 2.x, который будет записан как

if not set -q gnupg_SSH_AUTH_SOCK_by
or test $gnupg_SSH_AUTH_SOCK_by -ne %self
    set -gx SSH_AUTH_SOCK "/run/user/$UID/gnupg/S.gpg-agent.ssh"
end

Также обратите внимание, что естьнет знака равенства между именем переменной и значением в set -x.

0 голосов
/ 06 февраля 2019

Поскольку ${var:-value} расширяется до value, если $var пусто, вы всегда можете заменить его, написав длинный код:

begin
  if test -n "$gnupg_SSH_AUTH_SOCK_by"
    set result "$gnupg_SSH_AUTH_SOCK_by"
  else
    set result 0
  end

  if [ "$result" -ne %self ]
    set -x SSH_AUTH_SOCK "/run/user/$UID/gnupg/S.gpg-agent.ssh"
  end
  set -e result
end

Обратите внимание, что я не• использование (а) одобрение, (б) оправдание использования или (в) отказ от необоснованных предубеждений против пользователей рыбы.Таким образом, мой совет очень подозрительный, и вполне вероятно, что есть гораздо лучшие способы сделать это.

...