sloria/doitlive

Handle multi-line commands

開放

#45 建立於 2018年5月22日

 (9 則留言) (2 個反應) (0 位負責人)Python (102 個分叉)github user discovery
bughelp wanted

倉庫指標

星標
 (3,566 顆星)
PR 合併指標
 (PR 指標待抓取)

描述

Nice package. Having a problem using it when there are single or double-quotes in either command or the comments (using commentecho: true). For instance, the following line:

vault write -format=yaml pki_root/root/generate/internal \                                                                                                                                                                           
      common_name='somefakeorg.example Root CA' \                                                                                                                                                                                                                                                                                                                                                                                      
      ttl=8760h                                                                                                                                                                                                                                                                                                                                                                               

cause the following backtrace:

Traceback (most recent call last):                                                                                                                                                                                                                                                                                                                                                                                                       
  File "/home/redacted/.anyenv/envs/pyenv/versions/3.6.4/bin/doitlive", line 11, in <module>                                                                                                                                                                                                                                                                                                                                             
    sys.exit(cli())                                                                                                                                                                                                                                                                                                                                                                                                                      
  File "/home/redacted/.anyenv/envs/pyenv/versions/3.6.4/lib/python3.6/site-packages/click/core.py", line 722, in __call__                                                                                                                                                                                                                                                                                                               
    return self.main(*args, **kwargs)                                                                                                                                                                                                                                                                                                                                                                                                    
  File "/home/redacted/.anyenv/envs/pyenv/versions/3.6.4/lib/python3.6/site-packages/click/core.py", line 697, in main                                                                                                                                                                                                                                                                                                                   
    rv = self.invoke(ctx)                                                                                                                                                                                                                                                                                                                                                                                                                
  File "/home/redacted/.anyenv/envs/pyenv/versions/3.6.4/lib/python3.6/site-packages/click/core.py", line 1066, in invoke                                                                                                                                                                                                                                                                                                                
    return _process_result(sub_ctx.command.invoke(sub_ctx))                                                                                                                                                                                                                                                                                                                                                                              
  File "/home/redacted/.anyenv/envs/pyenv/versions/3.6.4/lib/python3.6/site-packages/click/core.py", line 895, in invoke                                                                                                                                                                                                                                                                                                                 
    return ctx.invoke(self.callback, **ctx.params)                                                                                                                                                                                                                                                                                                                                                                                       
  File "/home/redacted/.anyenv/envs/pyenv/versions/3.6.4/lib/python3.6/site-packages/click/core.py", line 535, in invoke                                                                                                                                                                                                                                                                                                                 
    return callback(*args, **kwargs)                                                                                                                                                                                                                                                                                                                                                                                                     
  File "/home/redacted/.anyenv/envs/pyenv/versions/3.6.4/lib/python3.6/site-packages/doitlive/cli.py", line 322, in play                                                                                                                                                                                                                                                                                                                 
    commentecho=commentecho)                                                                                                                                                                                                                                                                                                                                                                                                             
  File "/home/redacted/.anyenv/envs/pyenv/versions/3.6.4/lib/python3.6/site-packages/doitlive/cli.py", line 129, in run                                                                                                                                                                                                                                                                                                                  
    command_as_list = shlex.split(ensure_utf8(command))                                                                                                                                                                                                                                                                                                                                                                                  
  File "/home/redacted/.anyenv/envs/pyenv/versions/3.6.4/lib/python3.6/shlex.py", line 305, in split                                                                                                                                                                                                                                                                                                                                     
    return list(lex)                                                                                                                                                                                                                                                                                                                                                                                                                     
  File "/home/redacted/.anyenv/envs/pyenv/versions/3.6.4/lib/python3.6/shlex.py", line 295, in __next__                                                                                                                                                                                                                                                                                                                                  
    token = self.get_token()                                                                                                                                                                                                                                                                                                                                                                                                             
  File "/home/redacted/.anyenv/envs/pyenv/versions/3.6.4/lib/python3.6/shlex.py", line 105, in get_token                                                                                                                                                                                                                                                                                                                                 
    raw = self.read_token()                                                                                                                                                                                                                                                                                                                                                                                                              
  File "/home/redacted/.anyenv/envs/pyenv/versions/3.6.4/lib/python3.6/shlex.py", line 206, in read_token                                                                                                                                                                                                                                                                                                                                
    raise ValueError("No escaped character")                                                                                                                                                                                                                                                                                                                                                                                             
ValueError: No escaped character                                                                                                                                                                                                                                                                                                                                                                                                         

At least in the case of comments you can avoid the backtrace by escaping the single or double quotes but then the escaping also shows up in the commentecho output.

Ideas?

貢獻者指南