Я искал разницу между «.». и «исходные» встроенные команды и несколько источников (например, в этом обсуждении и справочной странице bash) показывают, что они одинаковы.
Однако, после проблемы с переменными среды, я провел тест , Я создал файл testenv.sh, который содержит:
#!/bin/bash
echo $MY_VAR
В командной строке я выполнил следующее:
> chmod +x testenv.sh
> MY_VAR=12345
> ./testenv.sh
> source testenv.sh
12345
> MY_VAR=12345 ./testenv.sh
12345
[обратите внимание, что 1-я форма вернула пустую строку ]
Итак, этот небольшой эксперимент предполагает, что в любом случае существует разница, где для команды «source» дочернее окружение наследует все переменные от родительского, где для «.» это не так.
Я что-то пропустил или это недокументированная / устаревшая функция bash ?
[GNU bash, версия 4.1.5 (1) -release (x86_64-pc-linux-gnu)]
Да, вы что-то упустили.
Я думаю, вы сбиваете с толку. это означает текущий каталог, как в ./testenv.sh и '.' это означает source (которая является встроенной командой). Так в случае, когда '.' означает source, это будет . ./testenv.sh. Имеете смысл?
Итак, попробуйте следующее:
MY_VAR=12345
. ./testenv.sh