Как «сериализовать» и «десериализация» аргументы командной строки в / из строки? -- perl поле с участием bash поле с участием serialization поле с участием command-line пол Связанный проблема

How to “serialize” and “deserialize” command line arguments to/from string?


4
vote

проблема

русский

Я называю моим сценарием:

 <код> $ ./script 'a!#*`*& ^$' "sdf sdf"qw sdsdf" 1 -- 2 3   

Это получает аргументы:

 <код> 1: a!#*`*& ^$ 2: sdf sdf"qw sdsdf 3: 1 4: -- 5: 2 6: 3   

Если мне нужно позвонить что-то с одинаковыми аргументами, я делаю это:

 <код> someprogram "$@"   

Но как я могу поставить все этот массив в строку (для хранения в файле или в переменной среде или пройти через TCP eaisly), а затем переключить его обратно в аргументы командной строки где-то? Я хочу, чтобы это было просто, коротко и безопасно.

 <код> export CMDLINE="$@" # What is in CMDLINE now? Escaped or not?  sh -c "someprogram $CMDLINE" # Will it do what I mean?   

В идеале я хочу, чтобы две программы: первые повороты включают параметрами командной строки в <код> [a-zA-Z0-9_]* String, другой переводит его обратно в параметры командной строки, которую я могу использовать.

Обновление: Написанные 2 версии паре скриптов. Что более полезно?

Английский оригинал

I call my script:

$ ./script 'a!#*`*& ^$' "sdf sdf"qw sdsdf" 1 -- 2 3 

It gets arguments:

1: a!#*`*& ^$ 2: sdf sdf"qw sdsdf 3: 1 4: -- 5: 2 6: 3 

If I need to call something with the same arguments locally, I do this:

someprogram "$@" 

But how can I put all that array to a string (to store in file or in environment variable or pass over TCP eaisly) and then turn it back to command line arguments somewhere? I want it to be simple, short and secure.

export CMDLINE="$@" # What is in CMDLINE now? Escaped or not?  sh -c "someprogram $CMDLINE" # Will it do what I mean? 

Ideally I want two programs: the first turns turns command line paramerets into a [a-zA-Z0-9_]* string, the other turns it back to command-line parameters I can use.

Update: written 2 versions of pairs of scripts. Which is more useful?

</div
           

Список ответов

1
 
vote

создал два скрипта: один сериализует свои аргументы <код> [a-ZA-Z0-9=_]* строки http://vi-server.org/vi/bin/deserialize.sh .

Сериализация:

 <код> #!/bin/bash n=$#; for ((i=0; i<$n; ++i)); do     if [ -z "$1" ]; then         echo 1     else         printf '%s' "$1" | base64 -w 0         echo     fi     shift done | tr ' ' '_' echo -n "0"   

Десериализация:

 <код> #!/bin/bash if [ -z "$1" ]; then     echo "Usage: deserialize data [optional arguments]"     echo "Example: "deserialize cXFx_d3d3_0 eee rrr""     echo "    will execute "eee rrr qqq www""     exit 1; fi  DATA="$1"; shift  i=0  for A in ${DATA//_/' '}; do     if [ "$A" == "0" ]; then      break;     fi                   if [ "$A" == "1" ]; then      A=""     fi                   ARR[i++]=`base64 -d <<< "$A"` done exec "$@" "${ARR[@]}"   

Пример:

 <код> deserialize `serialize qqq www` echo   
 

Created two scripts: one serializes it's arguments to a [a-ZA-Z0-9=_]* strings http://vi-server.org/vi/bin/serialize.sh, other starts this command line (with optional prepended arguments) http://vi-server.org/vi/bin/deserialize.sh.

Serialize:

#!/bin/bash n=$#; for ((i=0; i<$n; ++i)); do     if [ -z "$1" ]; then         echo 1     else         printf '%s' "$1" | base64 -w 0         echo     fi     shift done | tr ' ' '_' echo -n "0" 

Deserialize:

#!/bin/bash if [ -z "$1" ]; then     echo "Usage: deserialize data [optional arguments]"     echo "Example: "deserialize cXFx_d3d3_0 eee rrr""     echo "    will execute "eee rrr qqq www""     exit 1; fi  DATA="$1"; shift  i=0  for A in ${DATA//_/' '}; do     if [ "$A" == "0" ]; then      break;     fi                   if [ "$A" == "1" ]; then      A=""     fi                   ARR[i++]=`base64 -d <<< "$A"` done exec "$@" "${ARR[@]}" 

Example:

deserialize `serialize qqq www` echo 
</div
 
 
         
         
0
 
vote
vote
Лучший ответ
 

Несовместимо с помощью скрипта Bash в другом ответе

Скрипт для сериализации аргументов командной строки <код> [a-zA-Z0-9=_]* Строка: http : //vi-server.org/vi/bin/serialize

 <код> #!/usr/bin/perl use MIME::Base64; map {print encode_base64($_,'')."_" } @ARGV;   

Сценарий для десериализации его обратно (необязательно подготовление других аргументов): http: // vi-server .org / vi / bin / deserialize "

 <код> #!/usr/bin/perl use MIME::Base64; if($#ARGV<0) {     print << "EOF"; Usage: deserialize data [optional prepended arguments] Example: deserialize $(serialize 3 4 " 5 " "" "'6'" '`8`') echo 1 2 EOF     exit } my @A = map {decode_base64($_)} split '_', shift @ARGV; exec (@ARGV,@A);   

Также есть похожие сценарии для окружающей среды: http://vi-server.org/vi / bin / enversialize http://vi-server.org/vi/bin/ envdeserialize

 

Incompatible with Bash script in the other answer

Script to serialize command-line arguments to [a-zA-Z0-9=_]* string: http://vi-server.org/vi/bin/serialize

#!/usr/bin/perl use MIME::Base64; map {print encode_base64($_,'')."_" } @ARGV; 

Script to deserialize it back (optionally prepending other arguments): http://vi-server.org/vi/bin/deserialize

#!/usr/bin/perl use MIME::Base64; if($#ARGV<0) {     print << "EOF"; Usage: deserialize data [optional prepended arguments] Example: deserialize $(serialize 3 4 " 5 " "" "'6'" '`8`') echo 1 2 EOF     exit } my @A = map {decode_base64($_)} split '_', shift @ARGV; exec (@ARGV,@A); 

Also there are similar scripts for environment: http://vi-server.org/vi/bin/envserialize http://vi-server.org/vi/bin/envdeserialize

</div
 
 

Связанный проблема

1  Как мне позвонить сценарий Perl с моим контроллером Symfony2?  ( How do i call a perl script from my symfony2 controller ) 
Я пытаюсь реализовать автоматическую отправку в систему управления информацией из-за моего приложения Symfony2. Кто-то еще написал сценарий Perl для представл...

3  Как я могу использовать Perl для проверки программ C?  ( How can i use perl to test c programs ) 
Я ищу некоторые учебные пособия, показывающие, как я могу проверить программы C, написав программы Perl для автоматизации тестирования. В основном я хочу из...

0  Импорт свободно структурированных данных в базу данных  ( Importing loosely structured data into database ) 
Я получаю ежедневные каналы передачи данных с данными, которые просто структурированы. Мне нужно импортировать его в базу данных, поэтому я могу запустить отч...

-1  Порядок персонажей строки в Perl  ( Order of characters of the string in perl ) 
Я хочу написать код, который рассматривает строки с символами в разном порядке, как равный, поскольку в строках помещают такие же символы. Например, предполож...

3  Perl: Как распечатать следующую строку после сопоставления шаблона?  ( Perl how to print next line after matching a pattern ) 
Я хотел бы распечатать определенные данные после сопоставления шаблона или строки. У меня есть такой файл: <код> #****************************** List : ...

2  Перл Как распечатать хеш с несколькими ключами?  ( Perl how to print out a hash with multiple keys ) 
Я устанавливаю свой хэш в моей функции как <код> $hash{$loginId}{$month}=$hash{$loginId}{$month}+$time1; И я могу распечатать значение в одном месте как...

2  Как сделать переводчик Mod_Perl Sticky по некоторым конвенциям?  ( How to make a mod perl interpreter sticky by some conventions ) 
Как кажется, что mod_perl только удается Perl Переводчики на VHOST Есть любой способ, которым я могу влиять, какой клонированный переводчик MOD_PERL Выбирае...

1  Одинокий Perl Regex для удаления сбежал Ampersands изнутри атрибутов Href, но не других  ( Single perl regex for removing escaped ampersands from inside href attributes bu ) 
Это больше вопрос головоломки для моего любопытства, чем что-либо еще. Я ищу единую замену регулярного выражения выражения, которые будут конвертировать сущно...

3  Ищите функцию, не работающие в Perl  ( Seek function not working in perl ) 
Я попробовал ниже фрагмент кода, и функция поиска, похоже, не работает. <код> funct("ls -ltr /scratch/dummy/dum*"); sub funct { print " Recording "; open(...

19  Как я могу получить простоту PHP (развертывание), но мощность Perl?  ( How can i get phps deployment simplicity but perls power ) 
Я презираю язык PHP, и я совершенно уверен, что я не одинок. Но великая вещь о PHP - это способ, которым mod_php принимает и скрывает детали образования горы ...

4  Невозможно получить работу стада Perl  ( Unable to get perls flock working ) 
Я не могу сделать Perl's <код> flock Работа. Я блокирую файл, проверяя возврат, чтобы убедиться, что он на самом деле заблокирован, и я все еще могу открыт...

0  Проблема Regex Perl, последний символ усеченный  ( Perl regex issue last character truncated ) 
имеют странную проблему с моим регелем. Мое регулярное выражение сокращает последний символ, в приведенном ниже примере его следует вернуть значение 32, но ...

0  Заменив хеш-имя со скалярным в Perl  ( Replacing hash name with scalar in perl ) 
У меня есть хэш: <код> my $normal_hash = {a => '10',}; print $normal_hash; # prints HASH(0x......) Я хочу обратиться к этому хэш следующим образом: <...

0  Командная строка для использования Perl Script на нескольких файлах  ( Command line for using perl script on multiple files ) 
Сценарий Perl, данный мне, содержит: <код> yaml4 В начале и должен быть запущен на нескольких файлах FastQ. Я не уверен, какую командную строку использов...

4  ДБИ :: Реализация CSV на основе SQLite  ( Dbicsv implementation based on sqlite ) 
У меня много текстовых файлов, сравнивая друг друга в «SQL манере». <Код> DBD::CSV , очевидно, хороший выбор, чтобы начать, так как я могу использовать синт...

Связанный проблема

1  Как мне позвонить сценарий Perl с моим контроллером Symfony2? 
3  Как я могу использовать Perl для проверки программ C? 
0  Импорт свободно структурированных данных в базу данных 
-1  Порядок персонажей строки в Perl 
3  Perl: Как распечатать следующую строку после сопоставления шаблона? 
2  Перл Как распечатать хеш с несколькими ключами? 
2  Как сделать переводчик Mod_Perl Sticky по некоторым конвенциям? 
1  Одинокий Perl Regex для удаления сбежал Ampersands изнутри атрибутов Href, но не других 
3  Ищите функцию, не работающие в Perl 
19  Как я могу получить простоту PHP (развертывание), но мощность Perl? 
4  Невозможно получить работу стада Perl 
0  Проблема Regex Perl, последний символ усеченный 
0  Заменив хеш-имя со скалярным в Perl 
0  Командная строка для использования Perl Script на нескольких файлах 
4  ДБИ :: Реализация CSV на основе SQLite 



© 2021 www.qaru.top All Rights Reserved. Q&A House все права защищены


Licensed under cc by-sa 3.0 with attribution required.