Bash - вызов функции мастер-скрипта с передачей аргумента из дочернего скрипта - PullRequest
0 голосов
/ 20 сентября 2019

У меня есть мастер-скрипт, у которого мало функций определения.Используя дочерний скрипт, я пытаюсь вызвать мастер-скрипт вместе с передачей аргументов функции.Проблема в том, что мой мастер-скрипт выполняется дважды.1. Каждый раз, когда я вызываю свой дочерний скрипт, во-первых, все функции в мастер-скрипте выполняются без каких-либо аргументов (т. Е. Пустых аргументов). 2. Затем во второй раз значение аргумента передается и выполняется функция успешно, как и ожидалось.

Пожалуйста, позвольте мне, как избежать выполнения шага 1, указанного выше.

Я пытался с источником (или).с последующим указанием мастер-скрипта внутри дочернего скрипта и последующим указанием имени функции вместе с аргументами.Но это не работает.

Дочерний сценарий:


source <directory_path>/master.sh 
add '123' 'get' 'R'

Главный сценарий:


#! /bin/bash

add()
{
exec &> $1_$(date "+%Y%m%d%H%M").log
Change=$1
Command=$2
if [[ $Command == "get" ]];
then Command_1="getfacl"
elif [[ $Command == "set" ]];
then Command_1="setfacl"
elif [[ $Command == "ch" ]];
then Command_1="chown"
else Command_1="ls"
fi
Tag=$3
if [[ -z "$Tag" ]];
then Tag=""
else Tag="-$Tag"
fi
}
add;

Дочерний сценарий:


source <directory_path>/master.sh 
add '123' 'get' 'R'

Только один файл должен быть сгенерирован согласно сценарию.Но фактический результат создает 2 файла.

Ожидаемый результат


123_201909201012.log 

Фактический результат


_201909201012.log 
123_201909201012.log

1 Ответ

1 голос
/ 20 сентября 2019

сразу после объявления вашей функции вы выполняете ее немедленно:

add()
{
...
}
add; # you execute it here... remove this line
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...