programing

Ruby는 특정 디렉토리에서 쉘 명령을 실행합니다.

firstcheck 2021. 1. 17. 10:54
반응형

Ruby는 특정 디렉토리에서 쉘 명령을 실행합니다.


Ruby에서 다음과 같이 셸 명령을 실행하는 방법을 알고 있습니다.

%x[#{cmd}]

그러나이 명령을 실행할 디렉토리를 어떻게 지정합니까?

subprocess.Popen파이썬에서 와 비슷한 비슷한 방법이 있습니까?

subprocess.Popen(r'c:\mytool\tool.exe', cwd=r'd:\test\local')

감사!


의 블록 버전을 사용할 수 있습니다 Dir.chdir. 블록 안에는 요청 된 디렉토리에 있으며, Block 이후에도 여전히 이전 디렉토리에 있습니다.

Dir.chdir('mydir'){
  %x[#{cmd}]
}

Ruby 1.9.3 (차단 호출) :

require 'open3'
Open3.popen3("pwd", :chdir=>"/") {|i,o,e,t|
  p o.read.chomp #=> "/"
}

Dir.pwd #=> "/home/abe"

또한, 쉘 경로를

%x[cd #{dir} && #{cmd}]

안전한 변경 디렉토리로 역 기법에 가장 가까운 것은 capture2다음과 같습니다.

require 'open3'
output, status = Open3.capture2('pwd', :chdir=>"/tmp")

루비 문서에서 다른 유용한 Open3 메서드를 볼 수 있습니다. 한 가지 단점은에 jruby대한 지원 open3이 다소 손상 되었다는 것입니다.


최선의 해결책은 아닐 수도 있지만 Dir.pwd를 사용하여 현재 디렉토리를 가져 와서 어딘가에 저장하십시오. 그런 다음 Dir.chdir (destination)을 사용하십시오. 여기서 destination은 명령을 실행하려는 디렉토리입니다. 명령을 실행 한 후 Dir.chdir을 다시 사용하고 이전에 저장 한 디렉토리를 사용하여 복원합니다.


나는이 같은 문제가 있었고 두 명령을 백틱에 넣고 '&&'로 구분하여 해결했습니다.

`cd \desired\directory && command`

참조 URL : https://stackoverflow.com/questions/10147913/ruby-run-shell-command-in-a-specific-directory

반응형