Как знать, находит ли команда какой-либо результат?

#!/bin/sh

LOOK_FOR="NTLMAuthenticationFilter"

for i in `find ./ -name "*jar"`
do
echo "Looking in $i ..."
grepjar -e $LOOK_FOR $i
done

Я записал сценарий выше, и попытка найти, издает ли там какое-либо имя файла, LOOK_FOR существуют в тех, неприятный звук, мои поиски: grepjar-e $LOOK_FOR$i здесь, как я могу проверить, существует ли какой-либо успешный результат, и производит их?

между прочим, что является средним из $? в сценарии оболочки? Спасибо!

0
задан 21.10.2010, 07:49

2 ответа

Попробуйте следующее изменение:

#!/bin/bash

LOOK_FOR="NTLMAuthenticationFilter"

find ./ -name "*.jar" -print | while read -r FILE
do
echo "Looking in ${FILE} ..."
grepjar -e "${LOOK_FOR}" "${FILE}" 2>/dev/null >/dev/null
RETCODE=${?}
if [ ${RETCODE} -eq 0 ]; then
  echo "Found ${LOOK_FOR} in ${FILE}"
fi
done

? переменная хранит возвращаемое значение последней команды. Это обычно будет 0 для успеха и любого другого значения для отказа.

Вы также заметите, что я переключился for команда в a while команда. Это допускает больший набор возвращенных результатов.


Разрушение этого find ./ -name "*.jar" -print | while read -r FILE команда:

find ./ - запуск в текущем каталоге...
-name "*.jar" - найдите файлы, заканчивающиеся в .jar...
-print - и распечатайте их имена
| - перенаправление, которые производят к следующей команде while read -r FILE - и в то время как там производится от предыдущей команды, присвойте ее переменной FILE и выполненный команды между do и done.

Другими словами, это берет вывод команды находки (список файлов, заканчивающихся в jar) и выполняет блок кода в цикле. Для короткого списка это ведет себя точно как Ваша версия с помощью for i in цикл. Преимущество состоит в том, что это поддерживает длинные списки, так как существует верхний предел тому, что можно передать командную строку, как Вы делали с for i in цикл.

Править: Измененный на сценарий удара, измененный стиль заключения в кавычки переменной, включал предложения из комментариев и некоторых других изменений стиля.

4
ответ дан 24.11.2019, 03:10

Необходимо ли смочь использовать $?.

В $ удара? хранит возвращаемое значение команды. Вы могли проверить это значение после команды grepjar и повторить $i, если это - то, что Вы после.

1
ответ дан 24.11.2019, 03:10

Теги

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