
У меня есть команда, которую я пытаюсь выполнить в оболочке Bourne для Solaris 9.
find ${DATADIR} -name "check_*" -type f -exec sh -c '$0 | ${PARSEDATA}' {} \; >> ${TMP_1}
Моя проблема в том, что переменная ${PARSEDATA}
не работает должным образом. Я пробовал использовать двойные кавычки вокруг нее, но проблема в $0
имени скрипта, выполняющего этот код, а не в файле, найденном с помощью find
команды.
Любые предложения по решению этой, возможно, простой проблемы, будут весьма полезны.
Заранее спасибо.
Обновлять: $0
- это имя скрипта, найденного с помощью find
команды, переменная for ${PARSEDATA}
- это фильтр, расположенный где-то в системе, который изменяет вывод каждого найденного скрипта. Однако проблема в том, что я не могу получить и то, и другое $0
и ${PARSEDATA}
правильно развернуть, либо $0
разворачивается нормально с помощью одинарных кавычек, либо с помощью двойных кавычек ${PARSEDATA}
разворачивается нормально, но затем $0
становится именем исходного скрипта, который запускает эту find
-команду.
решение1
Я не уверен, что вы пытаетесь сделать? Но если вы хотите найти скрипты с именем check_*, а затем запустить их и передать через программу ${PARSE_DATA}, ну, я думаю, файл, найденный find, не является, $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
решение2
Сохраните одинарные кавычки, проблема, скорее всего, в том, что вы не экспортировали переменную PARSEDATA.
export PARSEDATA
find ${DATADIR} -name "check_*" -type f -exec sh -c '$0 | ${PARSEDATA}' {} \; >> ${TMP_1}
решение3
Если вы хотите, чтобы $0 не раскрывался оболочкой (используя одинарные кавычки), а ${PARSEDATA} раскрывался, то почему бы просто не использовать разные кавычки для каждого:
find ${DATADIR} -name "check_*" -type f -exec sh -c '$0 | '"${PARSEDATA}" {} \; >> ${TMP_1}
Пока вы сохраняете объединёнными кавычки, оболочка просто расширит ${PARSEDATA} и передаст всю команду как один токен для поиска.