Skip to content

fix(out): escape backslashes in output shell scripts#35

Merged
relastle merged 4 commits intorelastle:masterfrom
Ryooooooga:escape-backslashes
Dec 24, 2020
Merged

fix(out): escape backslashes in output shell scripts#35
relastle merged 4 commits intorelastle:masterfrom
Ryooooooga:escape-backslashes

Conversation

@Ryooooooga
Copy link
Contributor

@Ryooooooga Ryooooooga commented Dec 23, 2020

abst: This is a suggestion that the \ contained in the output of pmy main should be escaped.

Currently, backslashes in the output of pmy main are not escaped.
For example, ~/.pmy/rules/pmy_rules.yml is:

- description: test
  regexp-left: ^(?P<query>.*)$ # <query> matches whole input
  cmd-groups:
    - stmt: print 'A\\nB' # print 'A\\nB' should output `A\nB'
      after: cat
  fuzzy-finder-cmd: fzf --query='<query>'
  buffer-left: '<query>'
  buffer-right: '[]'

Then, pmy main outputs the script below:

$ pmy main --buffer-left="" --buffer-right=""
local __pmy_out_command=$'print \'A\\nB\' ;'; ...

This means $__pmy_out_command == print 'A\nB' ;, and eval $__pmy_out_command outputs A<LF>B.

And echo also causes strange behavior.
The escape processing of the echo argument changes depending on the environment.
In the case of zsh, echo performs escaping, but command echo does not.

echo "--sh"
sh -c 'echo "A\nB"'
sh -c 'command echo "A\nB"'

echo "--bash"
bash -c 'echo "A\nB"'
bash -c 'command echo "A\nB"'

echo "--zsh"
zsh -c 'echo "A\nB"'
zsh -c 'command echo "A\nB"'
# Results in Alpine (Docker)
--sh
A\nB
A\nB
--bash
A\nB
A\nB
--zsh
A
B
A\nB

# Results in Ubuntu (Docker)
--sh
A
B
A
B
--bash
A\nB
A\nB
--zsh
A
B
A\nB

# Results in macOS
--sh
A
B
A
B
--bash
A\nB
A\nB
--zsh
A
B
A\nB

Copy link
Owner

@relastle relastle left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

And echo also causes strange behavior.
The escape processing of the echo argument changes depending on the environment.
In the case of zsh, echo performs escaping, but command echo does not.

This is interesting knowledge I've never known.
Thank you for fixing!

@relastle relastle merged commit 1fd8ce1 into relastle:master Dec 24, 2020
@Ryooooooga Ryooooooga deleted the escape-backslashes branch December 24, 2020 03:10
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.

2 participants