Как передать операторы echo из вызванного сценария оболочки в параметр метода в сценарии вызывающего - PullRequest
1 голос
/ 29 апреля 2019

У меня есть 2 сценария оболочки.script_1.sh и script_2.sh и оба имеют права на выполнение.

У меня есть метод в script_1.sh для записи операторов echo в файл журнала.

Ниже следует script_1.sh

#!/bin/sh
log() {
    /bin/echo $1 >> /path/to/theLogFile
}

TEST_VALUE=10
log "Logging a test value which says $TEST_VALUE"

# Calling script_2
/path/to/script_2

Ниже следует script_2.sh

#!/bin/sh
echo "This is logging from script 2"

Вопрос:
Все, что echo издано с script_1.sh, действительно получает запись в theLogFile.Но, очевидно, ничего из script_2.sh.У меня вопрос: как я могу вызвать script_2 из script_2.sh, чтобы добавить все echo операторов из script_2.sh, а также , используя метод log из script_1 .
Должен ли я сделать что-то подобное?

log(/path/to/script_2)

Или есть способ получше?

Ответы [ 2 ]

1 голос
/ 29 апреля 2019

Альтернатива:

script_1.sh

#!/bin/sh

exec >> theLogFile # redirect all stdout (I recommend stderr too... just add 2>&1)

TEST_VALUE=10
echo "Logging a test value which says $TEST_VALUE"

# Calling script_2
. script_2.sh      # source the second script so it runs with the same env

script_2.sh

#!/bin/sh
echo "This is logging from script 2"

вывод:

Logging a test value which says 10
This is logging from script 2
<Ч />

Альтернатива script_1.sh

#!/bin/sh

log() { echo "$@"; } >> theLogFile

TEST_VALUE=10
log "Logging a test value which says $TEST_VALUE"

# Calling script_2
log "$(script_2.sh)" # pass ALL the output as a single formatted string
1 голос
/ 29 апреля 2019

Если вы хотите, чтобы весь stdout из script2 обрабатывался функцией журнала, используйте script1.sh как это в bash:

#!/usr/bin/env bash

logit() {
    command echo "$@" >> theLogFile
}
# export function definition
declare -fx logit

# Calling script_2 and redirect all stdout to logit function
(exec > >(logit "$(cat)"; exit); ./script2.sh)

# this will still be on stdout
echo "foo bar"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...