Если у вас нет find
, вы не можете сделать намного лучше, чем то, что вы сделали: перечислите уровни. Если вам нужно перейти на произвольные уровни, вы можете сделать это с помощью рекурсивной функции (но будьте осторожны, рекурсия сложна, когда у вас есть только глобальные переменные). К счастью, с известной максимальной глубиной это намного проще.
Есть немного возможностей для улучшения: вам лучше поставить двойные кавычки вокруг всех подстановок переменных, если где-то есть имя файла, которое содержит пробел или специальные символы. И вы не проверяете, существует ли $exe
и является ли он исполняемым (это может быть шаблон …/*-*_test
, если этот шаблон ничего не соответствует, или, возможно, это неисполняемый файл).
for shle in shle */shle */*/shle */*/*/shle; do
for exe in "$shle"/*-*_test; do
test -x "$exe" && "$exe"
done
done
Если у вас даже нет test
(если у вас есть ksh, он встроен, но если это урезанная оболочка, которой он может отсутствовать), вам может понадобиться более сложный тест, чтобы увидеть, шаблон был расширен:
for shle in shle */shle */*/shle */*/*/shle; do
for exe in "$shle"/*-*_test; do
case "$exe" in
*/"*-*_test") :;;
*) "$exe";;
esac
done
done
(Я удивлен, что у вас нет find
, я думал, что QNX поставляется с полным пакетом POSIX, но я незнаком с экосистемой QNX, это может быть урезанная версия ОС для небольшое устройство.)