2013-04-06 5 views
1

exec 명령과 print 명령을 혼합 할 때 세미콜론을 사용하면 효과가 없습니다. 가장 좋은 방법은 무엇입니까?하나의 파일에 여러 개의 'exec'및 'print'명령이 있습니다.

print "Initializing tests...\n" 
print 'Testing 00_hello\n' 
exec 'cd 00_hello; rspec hello_spec.rb; cd ..' 
print 'Testing 01_temperature\n' 
exec 'cd 01_temperature; rspec temperature_spec.rb; cd ..' 

답변

4

왜 파일의 마지막 두 줄이 실행되지 않는지 묻는다면, 이는 세미콜론 사용과는 관계가 없습니다. exec은 현재 프로세스를 대체합니다. exec을 호출 한 다음 코드는 exec이 호출되는 즉시 프로세스 실행이 중지되기 때문에 실행되지 않습니다. 대부분의 경우 이 아닌 exec을 사용하려고합니다.

exec 또는 system에 주어진 명령의 끝에서 cd ..을 수행 할 필요가 없음을 지적해야합니다. cd은 프로세스가 실행되는 쉘과 해당 쉘에서 생성 된 프로세스에만 영향을 미치며 상위 프로세스에는 영향을 미치지 않습니다. 따라서 쉘 명령 안에 cd이 있으면 루비 프로세스가 영향을받지 않으므로 cd이 필요하지 않습니다.

아, 작은 따옴표로 묶은 문자열 안에 \n과 같은 이스케이프 시퀀스를 사용할 수 없으며 단지 백 슬래시 뒤에 문자 n이 표시됩니다. \n을 사용하려면 큰 따옴표로 묶은 문자열을 사용해야합니다. print 대신 puts을 사용하면 끝에 자동 줄 바꿈이 자동으로 삽입되므로 \n이 전혀 필요하지 않습니다.

4

execsystem으로 혼합했습니다. exec은 인수의 명령을 실행하여 현재 프로세스를으로 바꿉니다. 파일을 실행하고 기다렸다가 다시 제어 얻고 싶은 경우에, 당신은 system를 사용해야합니다 :

print "Initializing tests...\n" 
print 'Testing 00_hello\n' 
system 'cd 00_hello; rspec hello_spec.rb; cd ..' 
print 'Testing 01_temperature\n' 
system 'cd 01_temperature; rspec temperature_spec.rb; cd ..' 
0

시스템 명령과 같은 문자열을 실행합니다 역 인용 부호 (') 사이에 문자열을 배치.

예를 들어보십시오.

print "Initializing tests...\n" 
print 'Testing 00_hello\n' 
`cd 00_hello; rspec hello_spec.rb; cd ..` 
print 'Testing 01_temperature\n' 
`cd 01_temperature; rspec temperature_spec.rb; cd ..` 
+0

Backticks는 명령 출력을 인쇄하지 않고 문자열로 반환합니다. 그게 네가 원하는 것이면 좋겠지 만 코드에서 반환 된 문자열을 사용하지 않으므로 출력이 무시됩니다. 그리고 나는 OP가 결과물을보고 싶어한다고 확신합니다. – sepp2k

+0

@Sachin은 백틱으로 보간하는 방법이 있습니까? – bwobst

+0

@dresdin : 예, 문자열에서와 같이'# {}'을 사용하십시오. – Linuxios

관련 문제