Вы развернули экземпляр с частным и общедоступным (плавающим IP) интерфейсами. Я мог видеть, что плавающий IP-адрес назначен вашему экземпляру. Пожалуйста, подтвердите, есть ли общедоступная сеть (172.24.4.0) в вашей сетевой среде openstack, и настроили ли вы интерфейс нейтронного моста?
Если это так, вы можете получить доступ к экземпляру из внешней сети, используя IP-адрес (172.24.4.12).
pat="'*.ab' -o -name '*.bc'"
find $path -type f $open -name $pat $close
Это не то, что вам нужно. :кавычки внутри переменной pat
воспринимаются не как кавычки, а как буквальные символы. После расширения $pat
оно разбивается на слова, в результате чего слова '*.ab'
, -o
, -name
и '*.bc'
сохраняются с одинарными кавычками. Поэтому, если у вас нет имен файлов с одинарными кавычками внутри, это не будет совпадать.
path=path
Это устанавливает переменную path
в литеральную строку path
, но я полагаю, что это был просто заполнитель.
open="\("
close="\)"
Они помещают буквальные обратные косые черты в переменные, и find
, вероятно, должен пожаловаться, так как он получает аргумент \(
. Достаточно один раз поставить скобку, поэтому либо open="("
, либоopen=\(
Если вам нужно построить список выражений для find
, используйте оболочку с массивами (Bash или почти что угодно, но только не простуюsh
):
args=()
args+=( -name "*.ab" )
args+=( -or -name "*.bc" )
find... \( "${args[@]}" \)
Оберните построение массива -в цикл, если это необходимо.
Используйте простой подход (вместо игры с переменными):
find $path -type f -name "*.ab" -o \( -name "*.bc" \)
Вы используете переменную неправильного типа и забыли заключить ее в кавычки.
Здесь вам нужен массив для хранения более одного аргумента:
#! /bin/bash -
pat=('*.ab' -o -name '*.bc')
open='('
close=')'
path=path
find "$path" -type f "$open" -name "${pat[@]}" "$close"
Обратите внимание, что аргумент *.ab
и (
вы хотите передать в find
, а не '*.ab'
или \(
. Эти кавычки и обратная косая черта являются частью синтаксиса оболочки.
Это только в том случае, если вы хотите построить командную строку оболочки, например, чтобы перейти к eval
для оценки оболочки, что вы бы сделали:
#! /bin/bash -
pat="'*.ab' -o -name '*.bc'"
open="\("
close="\)"
path=path
eval 'find "$path" -type f '"$open -name $pat $close"
Для последующей оценки оболочкой:
find "$path" -type f \( -name '*.ab' -o -name '*.bc \)
Что, как указано выше, приводит к вызову find
с этими аргументами:
find
path
(содержание$path
)-type
f
(
*.ab
-o
-name
*.bc
)