Дезинфекция Json для отправки с помощью Curl

Вы можете использовать что-то вроде this

while sleep 1;do ps -eo start_time,pid,euser,args:100 --sort start_time;done

Это перечислит все запущенные процессы в порядке времени запуска, хотя он будет самым последним внизу. Цикл обновляется каждую секунду, если вам нужен более точный период времени, измените режим сна по мере необходимости.

Если вы хотите, чтобы последние были наверху, вы можете перенаправить в tac

while sleep 1;do ps -eo start_time,pid,euser,args:100 --sort start_time | tac ;done

. Это изменит порядок в обратном порядке.

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

while sleep 0.1;do ps -eo start_time,pid,euser,args:100 | grep YOURCOMMAND;done

Чтобы просто проверить время начала этой отдельной команды и ничего не выводить, если он не запущен.

3
18.08.2016, 18:43
2 ответа

Использование jq :

USERINPUT=$'a e""R<*&\04\n\thello!\''

В этой строке есть пара двойных кавычек, символ EOT, новая строка, табуляция и одинарная кавычка вместе с обычным текстом.

data="$( jq --null-input --compact-output --arg str "$USERINPUT" '{"Attribute": $str}' )"

При этом создается объект JSON, содержащий пользовательские данные в качестве значения для единственного поля атрибута .

То же самое с использованием коротких опций:

data="$( jq -nc --arg str "$USERINPUT" '{"Attribute": $str}' )"

Отсюда мы получаем

{"Attribute":"ae\"\"R<*&\u0004\n\thello!'"}

как значение в $ data .

Теперь это можно использовать при вызове curl :

RESP="$( curl --connect-timeout "10" -s \
           -H "Content-Type: application/json" \
           -X POST -d "$data" \
           "$ENDPOINT" | jq -r '.key' )"
10
27.01.2020, 21:12

I более простое решение.

Корявая грязная строка, не подходящая для JSON:

user_input="$'a e""R<*&\04\n\thello!\''"

очистить/экранировать строку для использования JSON:

clean_user_input="$(echo "$user_input" | jq -R)"

теперь используйте чистую строку:

my_response=`curl --connect-timeout "10" -s -H "Content-Type: application/json" \
        -X POST -d '{"Attribute":$clean_user_input}',\
        $ENDPOINT | $JQ -r '.key'`

Я рекомендую имена переменных bash в нижнем регистре с одним или двумя символами подчеркивания

-2
27.01.2020, 21:12

Теги

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