У меня есть скрипт fish, который экспортирует некоторые переменные и запускает команду в конце. Я хотел бы иметь возможность получить этот файл для переноса этих переменных в текущий сеанс оболочки, но без выполнения команды в конце.

Итак, вопрос: могу ли я выяснить, выполняется ли текущий файл или поступает из него?

2 ответа2

1

Вы можете использовать переменную окружения $_ чтобы увидеть, выполняется ли ваш скрипт командой source :

#!/bin/fish
if test "$_" = source
  echo got sourced
else
  echo was execed
end
1

Я думаю, вы неправильно понимаете, что делает "источник" скрипта. Как правило, выполнение скрипта запускает его в отдельном процессе. Sourcing будет выполнять его в текущей оболочке. Он по-прежнему будет выполнять каждую строку.

Вероятно, вы хотите отфильтровать последнюю строку. Пытаться:

source (sed '$d' filename | psub)

Команда psub используется для обработки вывода некоторого процесса, как если бы это был файл. Документация

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .