Как запустить все найденные скрипты по find - PullRequest
0 голосов
/ 01 мая 2018

Я пытаюсь найти все сценарии инициализации, созданные для websphere. Я знаю, что все скрипты заканчиваются на -init, поэтому первая часть кода:

find /etc/rc.d/init.d -name "*-init"

Кроме того, мне нужны все скрипты, которые запускаются по определенному пути, поэтому вторая часть будет

| grep -i "/opt/ibm"

Наконец, мне нужна помощь с последней частью. Я нашел скрипты, которые мне нужны для запуска их с аргументом stop.

find /etc/rc.d/init.d -name "*-init" | grep -i "/opt/ibm" | <<run script found with stop argument>>

Как мне запустить команду, найденную с помощью find?

Ответы [ 2 ]

0 голосов
/ 02 мая 2018

Используйте цикл, чтобы мы были немного осторожнее при их выполнении:

#!/bin/bash

shopt -s globstar
for file in /etc/rc.d/init.d/**/*-init; do     # grab all -init scripts
  script=$(readlink -f "$file")                # grab the actual file in case of a symlink
  [[ -f $script ]]          || continue        # skip if not a regular file
  [[ $file = */opt/ibm/* ]] || continue        # not "/opt/ibm/", skip
  printf '%s\n' "Executing script '$script'"
  "$script" stop; exit_code=$?
  printf '%s\n' "Script '$script' finished with exit_code $exit_code"
done
0 голосов
/ 01 мая 2018

Если вы опустите 'find' и будете использовать grep напрямую, вы можете сделать что-то вроде этого:

grep -i "/opt/ibm" /etc/rc.d/init.d/* | sed 's/:.*/ stop/g' | sort -u | bash
  • он напрямую использует grep, который добавляет имя файла к выводу: filename:matched line
  • , поскольку вам нужно только имя файла, а не совпадение, используйте sed, чтобы заменить ':', а остальную часть строки на 'stop' (см. Пробел перед остановкой)
  • используйте sort -u (убедитесь, что каждый скрипт выполняется только один раз)
  • Передать результат в оболочку
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...