Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

ipfs-test-lib: add shellquote() #1757

Merged
merged 1 commit into from
Sep 27, 2015
Merged

ipfs-test-lib: add shellquote() #1757

merged 1 commit into from
Sep 27, 2015

Conversation

chriscool
Copy link
Contributor

This function can be usefull in many places.

See for example:

#1742

Git has git rev-parse --sq-quote that does the same thing.

License: MIT
Signed-off-by: Christian Couder [email protected]

This function can be usefull in many places.

See for example:

#1742

Git has `git rev-parse --sq-quote` that does the same thing.

License: MIT
Signed-off-by: Christian Couder <[email protected]>
@jbenet jbenet added the status/in-progress In progress label Sep 27, 2015
jbenet added a commit that referenced this pull request Sep 27, 2015
ipfs-test-lib: add shellquote()
@jbenet jbenet merged commit a26ad22 into master Sep 27, 2015
@jbenet jbenet removed the status/in-progress In progress label Sep 27, 2015
@jbenet jbenet deleted the shell-quote branch September 27, 2015 07:29
@ion1
Copy link

ion1 commented Sep 27, 2015

In hindsight, it might actually be nicer to do this instead:

        printf '%s'\' "$_space"
        printf '%s' "$_arg" | sed -e "s/'/'\\\\''/g"
        printf \'

@ion1
Copy link

ion1 commented Sep 27, 2015

In fact, my original implementation is just plain wrong, the above should work correctly. Sorry for that. Here’s a test script:

shellquote() {
    _space=''
    for _arg
    do
#       printf '%s'\' "$_space"
#       printf '%s' "$_arg" | sed -e "s/'/'\\\\''/g"
#       printf \'

        printf '%s' "$_space"
        printf '%s' "$_arg" | sed -e "s/'/'\\\\''/g; s/^/'/; s/\$/'/;"

        _space=' '
    done
    printf '\n'
}

printf '%s\n' \''"foo\
bar'

eval "$(shellquote printf '%s\n' \''"foo\
bar')"

eval "$(git rev-parse --sq-quote printf '%s\n' \''"foo\
bar')"

@jbenet
Copy link
Member

jbenet commented Sep 27, 2015

@ion1 @chriscool maybe let's add a test

@ion1
Copy link

ion1 commented Sep 27, 2015

Here’s something that could be used as a basis for a unit test.

shellquote() {
    _space=''
    for _arg
    do
        printf '%s'\' "$_space"
        printf '%s' "$_arg" | sed -e "s/'/'\\\\''/g"
        printf \'
        _space=' '
    done
    printf '\n'
}

# Some shells don’t like \000.
bytes_sans_NUL="$(
    printf '\001\002\003\004\005\006\007\010\011\012\013\014\015\016\017\020\021\022\023\024\025\026\027\030\031\032\033\034\035\036\037\040\041\042\043\044%%\046\047\050\051\052\053\054\055\056\057\060\061\062\063\064\065\066\067\070\071\072\073\074\075\076\077\100\101\102\103\104\105\106\107\110\111\112\113\114\115\116\117\120\121\122\123\124\125\126\127\130\131\132\133\134\135\136\137\140\141\142\143\144\145\146\147\150\151\152\153\154\155\156\157\160\161\162\163\164\165\166\167\170\171\172\173\174\175\176\177\200\201\202\203\204\205\206\207\210\211\212\213\214\215\216\217\220\221\222\223\224\225\226\227\230\231\232\233\234\235\236\237\240\241\242\243\244\245\246\247\250\251\252\253\254\255\256\257\260\261\262\263\264\265\266\267\270\271\272\273\274\275\276\277\300\301\302\303\304\305\306\307\310\311\312\313\314\315\316\317\320\321\322\323\324\325\326\327\330\331\332\333\334\335\336\337\340\341\342\343\344\345\346\347\350\351\352\353\354\355\356\357\360\361\362\363\364\365\366\367\370\371\372\373\374\375\376\377'
)"

test "$(eval "$(shellquote printf '%s' "$bytes_sans_NUL")" | sha256sum -b)" = "929351ec9c272028c6c70f92a33c69059639c1ef81d7baea0650552d39730266 *-"

@chriscool
Copy link
Contributor Author

Ok, I will add some tests. Thanks @ion1!

This was referenced Sep 29, 2015
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants