Получить путь к текущему исходному файлу с помощью fish

В сценарии оболочки рыбы можно ли получить путь, по которому живет сценарий оболочки? В bash для этого можно использовать переменную BASH_SOURCE.


person Lorin Hochstein    schedule 10.01.2010    source источник


Ответы (1)


Один из способов — использовать команду status.

eg.

~/tmp> echo status -f > show_filename.fish
~/tmp> fish show_filename.fish
/home/foo/tmp/show_filename.fish

--

Ах, извините - судя по вашему комментарию, я неправильно понял вопрос. Я думал, вы имели в виду полный путь, а не каталог скрипта.

Вы можете просто отправить результат состояния на dirname. Это не встроенная функция рыбы, в отличие от статуса, но рыба в любом случае имеет тенденцию отдавать на аутсорсинг как можно больше этой функциональности (см. «Закон минимализма» в разделе рыба дизайн-документ). Я не вижу в документации ничего лучшего для этого, так что, может быть, это пока самое лучшее, что мы можем получить?

Внося поправки в пример, измените содержимое show_filename.fish следующим образом:

dirname (status -f)

Теперь вы должны получить:

~/tmp> fish show_filename.fish
/home/foo/tmp
person otherchirps    schedule 10.12.2010
comment
Это довольно близко. Есть ли чистый рыбный способ разбора строки /home/foo/tmp/show_filename.fish для получения /home/foo/tmp? - person Lorin Hochstein; 12.12.2010
comment
Идеальный! Это именно то, что я хотел. - person Lorin Hochstein; 13.12.2010
comment
cd (dirname (status -f)); and pwd дает абсолютный путь независимо от того, запускаете ли вы скрипт в текущем каталоге. - person Ezbob; 17.01.2017