Разница между ip-адресом и ifconfig?

Ваша проблема в основном связана с флагами -Fв строке $final_paths. Он передается одним аргументом в curl. Решение: не вместо -заключает в кавычки расширение переменной, чтобы полагаться на правильное разделение строки оболочкой.

Когда у вас есть список вещей, которые вам нужно передать в программу в виде отдельных элементов, используйте массив:

#!/bin/bash

url='http://localhost:4502'
url+='/content/test/events/whats-on/all-about-women-home/2018/wine-tasting/jcr:content'

tag_paths=(
    '/content/cq:tags/sales-stage/pre-sale'
    '/content/cq:tags/sales-stage/special-offer'
)

curl_opts=( --user "admin:admin" --form "tags3@TypeHint=String[]" )

for tag_path in "${tag_paths[@]}"; do
    curl_opts+=( --form "tags2=$tag_path" )
done

curl "${curl_opts[@]}" "$url"

Здесь мы помещаем параметры для передачи curlв массив curl_opts. Мы инициируем этот массив с вещами, которые, как мы знаем, всегда будут там, а затем добавляем параметры пути тега, перебирая массив tag_paths. Расширение "${curl_opts[@]}"в двойных кавычках -в конце будет расширено на все элементы массива curl_opts, причем каждый элемент будет отдельно заключен в кавычки.

Я также решил создать полный URL-адрес в начале, поскольку он статичен,и я использую длинный вариант для curl, так как это сценарий, и мы можем позволить себе быть немного более подробным (ради удобочитаемости ).

Делая это таким образом, цитирование становится интуитивно понятным, и вам не нужно возиться с разбором списков, разделенных запятыми -, с экранированием специальных символов или установкой IFSна какое-то не -значение по умолчанию.


Тот же скрипт, но для/bin/sh:

#!/bin/sh

url='http://localhost:4502'
url="$url/content/test/events/whats-on/all-about-women-home/2018/wine-tasting/jcr:content"

set -- \
    '/content/cq:tags/sales-stage/pre-sale' \
    '/content/cq:tags/sales-stage/special-offer'

for tag_path do
    set -- "$@" --form "tags2=$tag_path"
    shift
done

set -- --user "admin:admin" --form "tags3@TypeHint=String[]" "$@"

curl "$@" "$url"

Здесь мы ограничены использованием только одного массива, $@. Элементы устанавливаются в этом массиве с помощью set.

0
12.01.2021, 02:48
3 ответа

Выходные данные ip addrи ifconfigэквивалентны, но немного различаются обозначениями одного и того же IP-адреса и сетевой маски.

Понятие

10.0.1.178/24

означает, что ваш IP-адрес 10.0.1.178, а сетевая маска для вашей сети состоит из первых 24 бит адреса. Это то же самое, что утверждение

inet 10.0.1.178 netmask 255.255.255.0

из вывода ifconfig, только в более компактной записи, и означает, что с точки зрения таблицы маршрутизации ядра ваш IP-адрес считается принадлежащим подсети, в которой может размещаться до 254 различных компьютеров, чьи адреса могут варьироваться от 10.0.1.1до 10.0.1.254.

Информация о сетевой маске важна для ядра при попытке определить, возможно ли получить доступ к заданному удаленному адресу, с которым вы хотите установить соединение. Адрес, такой как 10.0.1.25, например. доступен сразу, так как принадлежит к той же подсети, что и ваш собственный компьютер, но для достижения, скажем, 10.0.2.105должен быть настроен соответствующий маршрут.

Вы можете просмотреть эту статью в Википедии или эту статью о маршрутизации для дальнейшего чтения.

2
18.03.2021, 22:37

Вторая часть после косой черты — это маска вашей подсети --, другими словами, доступное количество адресов в вашей частной сети. В вашем случае это 256. Посмотрите эту шпаргалку по подсети:https://www.aelius.com/njh/subnet_sheet.html

0
18.03.2021, 22:37

ip (8 )— собственная утилита управления сетью Linux, принадлежащая проекту iproute2. Его можно использовать для взаимодействия с сокетом NETLINK ядра для управления сетевыми вещами Linux.

ifconfig (8 )— BSD-совместимая утилита для управления сетью, это просто оболочка iproute2.

Короче :ifconfig (8 )— это подмножество if ip (8 ), мы сохраняем его для совместимости.

СОВЕТ :Используйте ip (8 )вместо ifconfig (8 ), если это возможно.

0
18.03.2021, 22:37

Теги

Похожие вопросы