знайти + отримати $? вихід різниться 0, коли знахідка не відповідає слову


2

коли я виконую

  find /tmp  -name something 

Команда find не знайти щось слово під / tmp

  echo $?

  I get $?=0

все добре

але як увімкнути статус виходу різниться 0, коли команда find не знайде щось слово?


Відповіді:


1

findповертає 0, якщо він працює успішно і не дорівнює нулю, якщо є помилки. Він не встановлює вихідний код на основі того, чи було знайдено щось. Вам потрібно буде зробити щось подібне:

files=$(find /tmp  -name something)
if [[ -n "$files" ]]
then
    echo "files were found"
fi

Однак, швидше за все, ви хочете щось зробити з іменами. Ви можете обробити їх у циклі:

find /tmp  -name something | while read -r filename
do
    echo "found: $filename
done

або

while read -r filename
do
    echo "found: $filename
done < <(find /tmp  -name something)

Якщо нічого не знайдено, цикл вийде, нічого не зробивши.


1

Я вважаю, що це найбільш стислий і прямий метод:

test "`find /tmp/ -name something -print -quit 2>/dev/null`"

1
Це працюватиме лише в тому випадку, якщо не більше одного матчу. Подвійні цитати навколо підстав повинні це подолати.
Денніс

Також я випадково пропустив -print -quit.
данторн
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.