В
. path/to/script at least one argument
Как уже говорили другие, в зависимости от оболочки эти дополнительные аргументы либо игнорируются (Bourne, Almquist ), либо заменяют текущий набор позиционных параметров ($@
, $1
, $2
... )для интерпретации этого скрипта (большинства других оболочек ). POSIX не определяет поведение, когда в .
передаются дополнительные аргументы. В этом случае между оболочками также существуют некоторые различия в отношении того, останутся ли какие-либо изменения в позиционных параметрах (, как и в set a b
), сделанные в сценарии, после завершения .
.
В:
. path/to/script
Однако поведение указано. Позиционные параметры должны , а не изменяться, поэтому для интерпретации скрипта они останутся такими же, как и раньше.
Если вы хотите, чтобы позиционные параметры были пустым списком во время интерпретации этого скрипта, вам нужно предварительно сбросить его или использовать функцию:
set -- # or shift "$#"
. path/to/script
(хотя позиционные параметры теряются ). Или используйте функцию:
dot() { file=$1; shift;. "$file"; }
dot path/to/myscript
Во время выполнения команды .
позиционные параметры будут параметрами функции. После shift
это будут аргументы, переданные функции, за вычетом первого, поэтому в приведенном выше примере пустой список; но это означает, что с помощью этой функции вы можете переносимо передать произвольный список позиционных параметров исходному сценарию, как в:
dot path/to/myscript extra args
Где этиextra
args
будут доступны как $1
и $2
в исходном скрипте.
А если myscript
вызовет set
для изменения списка позиционных параметров, это повлияет только на позиционные параметры функции, и эти изменения не сохранятся после возврата из функции.
Я думаю, что вы разрешили неправильный порт в ufw
:, вы пытаетесь использовать порт 2194 для telnet, и вы разрешили порт 1194 в соответствии с выводом ufw show status
, который вы опубликовали.