Я сделал команду bash, которая генерирует один лайнер для перезапуска всех экземпляров Weblogic (8,9,10) на сервере. Скрипт работает хорошо, но мне нужно предложение, чтобы улучшить его с помощью dirname концепция
/usr/ucb/ps auwwx | grep weblogic | tr ' ' '\n' | grep security.policy | grep domain | awk -F'=' '{print $2}' | sed 's/weblogic.policy//' | sed 's/security\///' | sort | sed 's/^/cd /' | sed 's/$/ ; cd .. ; \/recycle_script_directory_path\/recycle/ ;' | tr '\n' ' '
Чтобы перезапустить экземпляр Weblogic, сценарий recycle (/ recycle_script_directory_path / recycle /) должен быть запущен из каталога домена, поскольку сценарий перезапуска извлекает некоторую информацию о приложении из некоторых файлов .ini в каталоге домена.
Следующая часть скрипта генерирует строку для cd в родительский каталог приложения, то есть в каталог домена.
sed 's/$/ ; cd .. ; \/recycle_script_directory\/recycle/ ;' | tr '\n' ' '
Я уверен, что есть лучший способ cd в родительский каталог, например cd dirname но каждый раз, когда я запускаю следующую команду cd dirname, она выдает ошибку «Синтаксис переменной».
cd $(dirname '/domain_directory_path/app_name')
Как включить имя каталога cd в команду bash?
Пожалуйста, дайте мне знать, если я могу сделать еще какие-нибудь улучшения
Некоторая информация о моем сценарии
1) В следующей части перечислены экземпляры веб-логики, работающие вместе с их полным путем.
/usr/ucb/ps auwwx | grep weblogic | tr ' ' '\n' | grep security.policy | grep domain | awk -F'=' '{print $2}' | sed 's/weblogic.policy//' | sed 's/security\///' | sort
2) Часть домена grep требуется, поскольку все доменные имена имеют домен в качестве суффикса
Чтобы решить вашу проблему, я написал очень простой сценарий:
#!/bin/bash
cd /usr/local/share/pixmaps
pwd
sleep 5
path=(dirname '/usr/local/shar/pixmaps')
echo $path
sleep 5
вывод pwd в порядке
вывод пути - dirname
Таким образом, когда вы пытаетесь cd $(dirname '/domain_directory_path/app_name')
он пытается перейти к cd dirname ... которого, по-видимому, нет
Как я нахожу в одном из блогов с аналогичной ситуацией:
$ cd $(dirname $(find / -name unknownfile.txt 2>/dev/null | head -n 1))
$ pwd
/home/peter/status/2007/november
Таким образом, я думаю cd $($(dirname '/domain_directory_path/app_name'))
должен решить вашу проблему
Я пробовал следующий сценарий:
#!/bin/bash
cd /usr/local/share/pixmaps
pwd
sleep 5
path=($(dirname '/usr/local/share/pixmaps'))
echo $path
sleep 5
cd /
pwd
sleep 5
cd $path
pwd
и выход
/usr/local/share/pixmaps
/usr/local/share
/
/usr/local/share
Еще кое-что
Проведение прямого cd $($(dirname '/domain_directory_path/app_name'))
не сработало
Таким образом, я думаю, вам сначала нужно будет извлечь путь к некоторой переменной (путь в моем скрипте), а затем cd к нему, как я сделал в своем скрипте.
С уважением
амрит