Является ли eval $ (имя файла cat) тем же, что и исходное имя файла?

Простой способ установки RVM состоит в том, чтобы следовать инструкциям на сайте разработчика (на самом деле сайт говорит «Пожалуйста, используйте только процесс установки с этого сайта, так как это только поддерживаемые типы и методы установки. "):

curl -L get.rvm.io | bash -s stable

Загрузить RVM:

source ~/.rvm/scripts/rvm

Найти требования (следуйте инструкциям):

rvm requirements

Установить ruby:

rvm install 1.9.3

В моей системе (12.04) все это происходило без заминок; перечисленные требования легко найти и установить с помощью apt-get.

1
задан 12 August 2012 в 01:42

2 ответа

Как уже упоминалось в @glennjackman, вы захотите процитировать подстановку команд, иначе расщепление слов и расширение пути изменят содержимое до его обхода. И хотя оба будут выполнять команды из файла, есть различия.

Когда вы запускаете скрипт, будут изменены различные специальные переменные оболочки, в основном массивы BASH_SOURCE, BASH_LINENO и FUNCNAME. Они полезны для печати сообщений об ошибках и отладки. Вы можете вернуться из сценария источника с помощью команды return (help return). С помощью eval вы не получите этого эффекта. И аналогично ловушка RETURN не будет срабатывать для eval. При поиске сценария вы можете передать ему аргументы. Вы не можете сделать это с этим eval. С помощью eval подстановка команды будет считывать все содержимое файла в память, прежде чем передавать его на eval. Когда вы его используете, bash будет читать из файла по мере его появления.
8
ответ дан 25 May 2018 в 07:41

Есть хорошее резюме того, что источник, eval и exec делают здесь: http://www.unix.com/shell-programming-scripting/54347-bash-shell-exec-eval-source-looking-help-understand .html

Я думаю, что ваше использование eval и source'ing файла будет делать то же самое. Однако я не совсем уверен, что переменные внутри индекса будут вести себя одинаково в любом случае. Я бы рекомендовал использовать источник, если это возможно, потому что это более простой способ сделать и сделать ваш код более читаемым.

1
ответ дан 25 May 2018 в 07:41
  • 1
    полностью тангенциальный: bash имеет сокращенное значение для $(cat file) - & gt; [F2] – glenn jackman 12 August 2012 в 02:39

Другие вопросы по тегам:

Похожие вопросы: