Bash — Неправильное использование кавычек, я считаю — что я делаю не так?

#bash #curl #cookies

#bash #curl #файлы cookie

Вопрос:

По правде говоря, я сбит с толку — я думал, что уже понял основы bash, но это не так.

ПРОБЛЕМА: я хочу использовать оболочку curl, как показано ниже, для отправки POST-запроса к api, но когда я использую оболочку, ничего не происходит

Оболочка отлично работает в других случаях (т. Е. $ {_CURL} -s -o /dev/null -w % {http_code} $ {URL})

IDEA1: итак, я подумал, что это может быть связано с кавычкой вокруг объекта json, с которым у меня были проблемы в прошлом, поэтому в итоге я вставил «‘$ {JSON}'», что не сработало

ИДЕЯ 2: в оболочке curl я поместил все аргументы («-b $ {COOKIES} $ @») в кавычки, но ничего

обертка curl

 #!/bin/bash
# sets headers to use cookies
# ${Cookies} is set and translates to an absolute path of ./cookie-file.txt

if [ -f "${COOKIES}" ]; then
  curl -b "${COOKIES}" $@
else
  curl $@
fi
  

Объект Json, потому что я считаю его важным

 JSON=$( jq -n -r 
           --arg login $LOGIN 
           --arg pass ${PASS_INPUTS[@]} 
           '{username: $login, password: $pass}')
  

идентификатор файла использует его в

 #JSON is located right above the following line
#_CURL being the path to the wrapper i exported 
# Does not even send a request to the URL at $V2/auth/login
  RESPONSE=$($_CURL -s 
       --header "Content-Type: application/json" 
       --request POST 
       --data "$JSON" 
       $ARGS 
       "${V2}/auth/login")
   echo $RESPONSE

#---------------------------------------------------------------------------------------------
# This is what i had previously but Id rather not
# works just fine
[ ! -f "cookie-file.txt" ] amp;amp; ARGS="-c cookie-file.txt" || ARGS="-b cookie-file.txt"
  
  RESPONSE=$(curl -s 
       --header "Content-Type: application/json" 
       --request POST 
       --data "$JSON" 
       $ARGS 
       "${V2}/auth/login")
   echo $RESPONSE
  

Комментарии:

1. ShellCheck автоматически обнаруживает эту и другие распространенные проблемы

2. слышал об этом раньше, но вот мы здесь — не самые яркие в lowlife @thatotherguy

Ответ №1:

Основная проблема заключается в $ @, попробуйте :

 #!/bin/bash
# sets headers to use cookies
# ${Cookies} is set and translates to an absolute path of ./cookie-file.txt

if [ -f "${COOKIES}" ]; then
  curl -b "${COOKIES}" "$@"
else
  curl "$@"
fi
  

Без двойных кавычек аргументы с пробелами обрабатываются неправильно.

Комментарии:

1. СПАСИБО, добрый боже на небесах, благослови этого человека за его неортодоксальное знание bash @Philippe

2. рад, что я указал на это в названии, неправильное использование кавычек или их отсутствие…