1

У меня есть команда, которую я пытаюсь выполнить в оболочке Bourne для Solaris 9.

find ${DATADIR} -name "check_*" -type f -exec sh -c '$0 | ${PARSEDATA}' {} \; >> ${TMP_1}

Моя проблема в том, что переменная ${PARSEDATA} не будет работать должным образом, я попытался использовать двойные кавычки вокруг нее, тогда проблема в том, что $0 - это имя скрипта, выполняющего этот код, а не файл, расположенный с помощью команды find .

Любые предложения по решению этой, вероятно, легкой проблемы, очень полезны.

Заранее спасибо.

Обновление: $0 - это имя скрипта, расположенного с помощью команды find , переменная для ${PARSEDATA} - это фильтр, расположенный где-то в системе, который изменяет выходные данные каждого найденного скрипта. Однако проблема в том, что я не могу получить и $0 и ${PARSEDATA} для правильного расширения, либо $0 расширяется нормально с помощью одинарных кавычек, либо с использованием двойных qoutes ${PARSEDATA} расширяется нормально, но тогда $0 становится именем оригинальный скрипт, который запускает эту команду find .

3 ответа3

0

Сохраняйте одинарные кавычки, проблема, скорее всего, в том, что вы не экспортировали переменную PARSEDATA.

export PARSEDATA
find ${DATADIR} -name "check_*" -type f -exec sh -c '$0 | ${PARSEDATA}' {} \; >> ${TMP_1}
0

Если вы хотите, чтобы оболочка $ 0 не была расширена оболочкой (с использованием одинарных кавычек), а $ {PARSEDATA} была расширена, то почему бы просто не использовать разные кавычки для каждого:

find ${DATADIR} -name "check_*" -type f -exec sh -c '$0 | '"${PARSEDATA}" {} \; >> ${TMP_1}

Пока вы сохраняете объединенные части в кавычках, оболочка будет просто расширять $ {PARSEDATA} и передавать всю команду как один токен для поиска.

0

Я не уверен в том, что вы пытаетесь сделать? Но если вы хотите найти сценарии с именем check_ *, а затем запустить его и передать через программу $ {PARSE_DATA}, я думаю, что файл, найденный при поиске, не $0 а {}

пример

find /var /ftp /mp3 -name "* .mp3" -type f -exec chmod 644 {} \; (Википедия)

Поэтому я думаю, что вы можете использовать ваши двойные кавычки:

find ${DATADIR} -name "check_*" -type f -exec sh -c '{} | ${PARSEDATA}' \; >> ${TMP_1}

Я попытался успешно:

PG='sed s/Blah/Bleh/'
find . -name "check_*" -type f -exec sh -c "{} | $PG" \;

> Bleh Blah

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .