LINUX.ORG.RU

Переменные в параметрах curl

 ,


0

1

Подскажите пожалуйста как в bash скрипте передать curl переменные с двойными кавычками. Должно получится что-то подобное:

curl -T "variable-file" "variable-url"

Не получается вставить кавычки к переменным, а без кавычек не работает.

var="\"name_files\""
echo $var
"name_files"

Но curl и без кавычек работает

curl -T file url

Deleted
()
Ответ на: комментарий от Deleted

Попробовал

var="\"name_files\""
Через echo вижу переменную с кавычками, но с именем файла:

curl: Can't open '«my_file_name»'!

а с url:

curl: (1) Protocol «„https“ not supported or disabled in libcurl

P.S. Без скрипта в bash всё отлично отрабатывает.

NightCat
() автор топика
#!/bin/bash

FILE="filename.png"
URL="ftp://ftp.example.com/upload/"

curl -T "$FILE" $URL

убедись, что скрипт в той же директории, что и файл, иначе указывай для файла полный путь

anonymous
()
Ответ на: комментарий от anonymous

убедись, что скрипт в той же директории, что и файл

Это я 100 проверил. Мистика какая-то, делаю так:

url="\"$upload_url\""
myfile="\"$file\""

mycmd="$(echo "curl -T $myfile $url")"
echo $mycmd

Вижу что переменные curl с двойными кавычками. Запускаю на исполнение, получаю: curl: Can't open '«my_file_name.pdf»'! Если скопировать вывод переменной mycmd из кода приведенного выше в терминал, всё работает.

Где я ошибаюсь?

NightCat
() автор топика
Ответ на: комментарий от NightCat

Не знаю как это обьяснить, но заработало через

eval curl -T $myfile $url
NightCat
() автор топика
Ответ на: комментарий от NightCat

Где я ошибаюсь?

Везде, ты пишешь лютую дичь. Правильно

curl -T "$variable_file" "$variable_url"
и только так.

PS. Выучи раз и навсегда правила разбора unix shell (они не менялись последние лет 40), для отладки заведи функцию типа Args
Args() {
    printf "%d args:" $#
    printf " <%s>" "$@"
    echo
}
и проверяй ей свои сниппеты
$ variable_file=a\ \"\ c
$ variable_url=scheme://path
$ Args curl -T "$variable_file" "$variable_url" 
4 args: <curl> <-T> <a " c> <scheme://path>
$ Args curl -T $variable_file $variable_url
6 args: <curl> <-T> <a> <"> <c> <scheme://path>
, она покажет на сколько настоящих аргументов рассыпалась твоя строка и как они уехали в curl.

d_a ★★★★★
()
Последнее исправление: d_a (всего исправлений: 2)
Ответ на: комментарий от d_a

и только так.

В 99% это действительно так. Но, если переменная либо пуста либо не содержит спец символов, либо строка аргументов со спец символом=пробелом, то иногда таки cmd $var без кавычек имеет смысл — (не) передавать никакого/несколько аргументов команде.

vodz ★★★★★
()
Последнее исправление: vodz (всего исправлений: 2)
Ответ на: комментарий от vodz

Верно. Ещё есть кейс с управляемым рассыпанием по кастомному IFS. Укладывается в тот же последний процент.

d_a ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.