Как проинформировать канал сценария оболочки

У меня есть следующий сценарий:

#!/bin/sh

[ "${#}" -eq "0" ] && (printf "%s\\n" "${0}: word ..." >&2; exit 1)

_whats()
{
    [ -z "${1}" ] && return 1
    [ -z "${2}" ] && more_than_one="1"

    for word; do
        response="$(dig +short txt ${word}.wp.dg.cx)"
        printf "%s\\n" "${response}"
        if [ -z "${more_than_one}" ]; then
            printf "\\n%s\\n\\n" ":::::::::::::::::::::::::::::::::::::::::"
        fi
    done
}

_whats "${@}"

Это работает отлично, когда я называю это этим путем:

whats shell\ script dns #it ouputs two definitions (shell script and dns)

Однако я был бы также для вызова этого этим путем:

echo shell\ script dns | whats

Я просто привык к нему, все другие команды Unix могут сделать это, как Вы реализовали бы его в сценарии оболочки?

-2
задан 4 January 2015 в 10:24

1 ответ

После чтения следующих ссылок:

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

#!/bin/sh

if [ ! -t 0 ]; then
    #there is input comming from pipe or file, add to the end of $@
    set -- "${@}" $(cat)
fi

[ "${#}" -eq "0" ] && (printf "%s\\n" "${0}: word ..." >&2; exit 1)

_whats()
{
    [ -z "${1}" ] && return 1
    [ -z "${2}" ] && more_than_one="1"

    for word; do
        response="$(dig +short txt ${word}.wp.dg.cx)"
        printf "%s\\n" "${response}"
        if [ -z "${more_than_one}" ]; then
            printf "\\n%s\\n\\n" ":::::::::::::::::::::::::::::::::::::::::"
        fi
    done
}

_whats "${@}"

Который свяжет args + stdin в $, поэтому теперь он будет работать в следующих сценариях:

whats dns script #it outputs two definitions
echo dns script | whats #same outputs as above
echo dns script | whats ip #outputs ip, dns and script definition in that order

Это проанализирует правильно пробелы с, они стали args

whats shell\ script dns #output two definitions

Но не, когда те параметры передаются через канал:

echo shell\ script dns | whats #output three definitions

Однако это - проблема, которую другие утилиты Unix имеют также (-print0,-0, и т.д.), таким образом, я могу жить с нею.

0
ответ дан 4 January 2015 в 10:24

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

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