java를 사용하여 유닉스 셸 특수 변수에 액세스하는 방법. 유닉스java를 사용하여 유닉스 셸 특수 변수에 액세스하는 방법
몇 가지 예는 특별한 변수 쉘 :
현재 쉘의 프로세스 ID (PID)를 출력echo $$
.
echo $0
현재 실행중인 명령의 이름이 인쇄됩니다.
echo $?
10 진수 문자열로 실행 된 마지막 명령의 종료 상태를 인쇄합니다.
이러한 셸 변수가 스크립트 파일에 포함되어 있고 스크립트 파일을 ProcessBuilder 인수로 전달한 경우 java를 사용하여 성공적으로 실행할 수 있습니다. 그러나 이러한 변수가 인수로 전달되면 변수 자체로 취급되지 않습니다. 왜? 이 특수 쉘 변수에 액세스하는 방법은 무엇입니까?
echo $$
echo $?
echo $0
스크립트를 실행 파일에 쉘 특수 변수 시험이 자바 클래스 : 주석 아래 라인 :
String command ="/home/csk/sptest.sh";
을
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.List;
public class ExecSpecVars {
public static void main(String a[]){
InputStream is = null;
ByteArrayOutputStream baos = null;
List<String> list = new ArrayList<String>();
// String command ="/home/csk/sptest.sh";
String command ="echo $$"; //This should print the PID instead of the string "$$".
String cmd[] = command.split(" ");
for (int i = 0; i < cmd.length; i++) {
list.add(cmd[i]);
}
ProcessBuilder pb = new ProcessBuilder(list);
try {
Process prs = pb.start();
is = prs.getInputStream();
byte[] b = new byte[1024];
int size = 0;
baos = new ByteArrayOutputStream();
while((size = is.read(b)) != -1){
baos.write(b, 0, size);
}
System.out.println(new String(baos.toByteArray()));
} catch (IOException e) {
e.printStackTrace();
} finally{
try {
if(is != null) is.close();
if(baos != null) baos.close();
} catch (Exception ex){}
}
}
}
sptest.sh 파일은 아래의 명령이 포함되어 있습니다
아래의 내용에 대한 설명 :
String command ="echo $$";