쉘에서 참조, 디렉토리 이름 : 나는 루비의 system
호출을 참조하면왜 루비의`system`은`shellescape`가 아닌 첫 번째 인수입니까? 괄호 등으로
/tmp/\(example\)
, 나는 탈출해야 :
/tmp/(example)
필요가 같이 이스케이프 할 그것들이 첫 번째 주장인지 아닌지에 달려있다.
첫 번째 인수로 이스케이프 처리되지 않은 디렉토리. 실패.
system('/tmp/(example)/script') #>> sh: -c: line 0: syntax error near unexpected token `example' #>> sh: -c: line 0: `/tmp/(example)/script' #=> false
첫 번째 인수로 이스케이프 처리 된 디렉토리. 성공.
system('/tmp/(example)/script'.shellescape) #=> true
두 번째 인수로 이스케이프 처리되지 않은 디렉토리. 성공.
system('touch', '/tmp/(example)/script') #=> true
두 번째 인수로 이스케이프 처리 된 디렉토리. 실패.
system('touch', '/tmp/(example)/script'.shellescape) #>> touch: /tmp/\(example\)/script: No such file or directory #=> false
이 system
모든 인수하지만 명령 (첫 번째 인수)의 이름을 탈출 것으로 보인다.
system("#{__dir__}/something")
- 왜
system
이 방식으로 작동 않습니다 그 누구의 명령 상대 경로 등을 보유하고 스크립트의 문제인가? - 모든 것을 탈출 할 수있는 기본 옵션이 있습니까?
"나는'# system '이 존재하지 않고 ['Open3'] (http://ruby-doc.org/stdlib-2.4.2/libdoc/open3/rdoc/Open3)로 바로가는 경향이 있습니다. .html) (...) ". 'Open3'은이 상황에서 똑같이 동작합니다. 명령을 실행하고 출력을 신경 쓸 필요가 없으면'system'을 사용하고, 다른 모든 경우에는'Open3 '을 사용하는 경향이 있습니다. – user137369