Не зная больше о том, чего вы пытаетесь достичь, похоже, что ваши "начальные" сценарии оболочки никогда не возвращаются (возможно, они запускают , но оставьте его на переднем плане). Если это так, вы можете вместо этого искать , который запустит два сценария в фоновом режиме:
startWebLogic.sh &
startNodeManager.sh &
Обратите внимание, однако, что с добавленными амперсандами ваш сценарий будет завершиться сразу после запуск двух «стартовых» сценариев оболочки. Вы можете использовать подходящего менеджера служб, если вам нужен более точный контроль.
Вы не можете выполнить вложенную замену с переменной в крайней левой части . Таким образом, вы можете делать ${foo#$bar}
, но не то, что вы показываете.
Поместите результат подстановки в переменную, если хотите использовать ее в дальнейших подстановках.
Подстановка параметра не может воздействовать на результат подстановки другого параметра без предварительного сохранения исходного результата в переменной и применения к ней второй подстановки.
Вы также зацикливаете вывод find
, что не рекомендуется .
Правильный способ обеспечить цикл с результатом find
— это вызвать дочернюю оболочку и выполнить цикл там:
find. -type f -iname '*_??????????.pdf' -mtime -1 -exec sh -c '
for pathname do
timestamp=${pathname##*_} # remove up to last _
timestamp=${timestamp%.pdf} # remove.pdf
printf "pathname=%s\ttimestamp=%s\n" "$pathname" "$timestamp"
done' sh {} +
Таким образом, вам не нужно беспокоиться о реальных путях. Имена файлов (, т. е. имена файлов и каталогов, а также другие типы файлов )в Unix могут содержать любой символ, кроме /
и \0
, например пробел и новую строку. Используя подстановку команд в find
, вы заставляете оболочку, во-первых, выполнять разбиение слов (по умолчанию на пробелы, табуляции и новые строки ), а во-вторых, выполнять генерацию имен файлов на основе шаблонов, найденных в путях, возвращенных из find
. Таким образом, ваш исходный цикл может оказаться зацикленным на совсем других словах, чем вы ожидали.
Связанные:
Если я правильно понимаю, проблема использования Awk заключается в том, что вы вызываете один процесс Awk для каждого файла PDF (Я предполагаю, что у вас есть ОГРОМНОЕ количество таких ).
Вы можете запустить что-то вроде
find....... -print0 | perl -0nE '/.*_(\d{10}).pdf/ and say "$1.pdf"'
Или если вы соблюдаете структуру:
for file in $(find.....| perl....)
do
...
done
(и, конечно же, замените команду Perl любым эквивалентом Awk, sed, Python)
(Если у вас есть возможность попробовать этот подход, расскажите нам о time....
полученном)