Как выполнить расширение параметров в оболочке рыбы? - PullRequest
0 голосов
/ 09 июня 2019

У меня есть bash-программа , которая использует расширение параметров, чтобы вернуться на один уровень назад из каталога, в котором я работаю. Например, если я нахожусь в каталоге /path/to/my/dir, моя программа позволит мне перейти на /path/to/my/ без повторного ввода всего пути или использования cd - несколько раз. Недавно я решил начать использовать рыбные раковины, и мне это нравится. Но я не совсем уверен, как сделать расширение параметра в оболочке рыбы. Я попытался создать псевдоним для моей программы bash в ~/.config/fish/config.fish, чтобы back запускал bash /path/to/back.sh, но это не запускает программу в текущей среде. Изменение его на . /path/to/back.sh действительно не помогает, так как fish не знает, как запустить скрипт bash.

Мне было интересно, есть ли в рыбе функция расширения параметров? Я попытался прочитать документацию и не смог ее найти.

Любая помощь будет оценена.

Спасибо.

1 Ответ

1 голос
/ 09 июня 2019

Ваш скрипт back.sh не может работать, если вы не запускаете его через . или source. Это потому, что дочерний процесс не может влиять на среду, которая включает в себя CWD, любого другого процесса. Если вы запустите back.sh 1, он изменит только CWD этого сценария, что не имеет смысла, поскольку сценарий немедленно завершается.

Fish поддерживает расширение параметров, но не поддерживает фигурные скобки, такие как ${prev_dir%/*}. Fish предпочитает использовать команды для таких манипуляций, а не сложный синтаксис. Так, например, чтобы убрать все после последней косой черты, вы должны сделать что-то подобное в рыбе:

set prev_dir (string split -r -m1 / $prev_dir)[1]

И, как заметил один из комментаторов, вы обычно просто делаете cd .., чтобы подняться на один уровень вверх по иерархии каталогов. Как часто вам действительно нужно подняться более чем на один уровень вверх? Для меня ответ очень редко, и в этом случае я просто делаю cd ../.., чтобы переместиться на два уровня.

...