Eval Cat внутри функции - PullRequest
       9

Eval Cat внутри функции

0 голосов
/ 17 сентября 2018

Я пытался вычислить выражение внутри функции следующим образом:

eval "fn() { $(cat fn.sh); }"

Где fn.sh содержит следующее:

#!/bin/sh
echo "You provided $1."

Так что, когда я звоню:

fn "a phrase"`

, он печатает «Вы предоставили фразу».Однако я не могу заставить его работать.

Что особенно расстраивает, так это:

eval "$(cat fn.sh)"

работает отлично!Чего мне здесь не хватает?

Что я пробовал:

eval "fn() { \"\$(cat fn.sh)\"; }"
fn
# bash: #!/bin/sh
# echo "You provided $1."
# return 1: No such file or directory

eval "fn() { \$(cat fn.sh); }"
fn
# bash: #!/bin/sh: No such file or directory

и множество других комбинаций, большинство из которых на данный момент - работа с угадыванием.

Ответы [ 2 ]

0 голосов
/ 17 сентября 2018

Просто используйте source / . внутри новой функции.

fn () {
  . fn.sh "$1"
}

Если функция используется достаточно часто, если вы думаете, что повторный дисковый ввод-вывод будет проблемой, файл будетпочти наверняка будет в кеше диска при вызове fn.

0 голосов
/ 17 сентября 2018

Нашел ответ:

eval "fn() { eval \"\$(cat "fn.sh")\"; }"

Обязательно ссылка , которая наилучшим образом объясняет, насколько я понимаю риски безопасности при использовании eval.

...