Назад | Перейти на главную страницу

Невозможно перейти к родительскому каталогу с именем каталога cd

Я сделал команду 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 к нему, как я сделал в своем скрипте.

С уважением

амрит