Ваш скрипт back.sh не может работать, если вы не запускаете его через .
или source
. Это потому, что дочерний процесс не может влиять на среду, которая включает в себя CWD, любого другого процесса. Если вы запустите back.sh 1
, он изменит только CWD этого сценария, что не имеет смысла, поскольку сценарий немедленно завершается.
Fish поддерживает расширение параметров, но не поддерживает фигурные скобки, такие как ${prev_dir%/*}
. Fish предпочитает использовать команды для таких манипуляций, а не сложный синтаксис. Так, например, чтобы убрать все после последней косой черты, вы должны сделать что-то подобное в рыбе:
set prev_dir (string split -r -m1 / $prev_dir)[1]
И, как заметил один из комментаторов, вы обычно просто делаете cd ..
, чтобы подняться на один уровень вверх по иерархии каталогов. Как часто вам действительно нужно подняться более чем на один уровень вверх? Для меня ответ очень редко, и в этом случае я просто делаю cd ../..
, чтобы переместиться на два уровня.