OSX 용 Java와 함께 실행 파일 .sh 파일을 작성하십시오
-
21-08-2019 - |
문제
그래서 실행 파일이 될 .SH 파일을 작성하려고합니다. 이것이 제가 현재 작성하는 방법입니다.
Writer output = null;
try {
output = new BufferedWriter(new FileWriter(file2));
output.write(shellScriptContent);
output.close();
} catch (IOException ex) {
Logger.getLogger(PunchGUI.class.getName()).log(Level.SEVERE, null, ex);
}
따라서 파일을 잘 작성하지만 실행 가능하지는 않습니다. 작성시 실행 가능 상태를 변경할 수있는 방법이 있습니까?
편집 : 더 명확히하기 위해, 기본적으로 실행하려고 노력하므로, 예를 들어 생성 된 파일을 두 번 클릭하면 자동으로 실행됩니다.
해결책
당신은 그것을 chmod해야하며, 아마도 시스템 명령을 실행하여 다음과 같이 할 수 있습니다.
정말로 필요한 것은 다음과 같은 것을 발사하는 것입니다.
Runtime.getRuntime().exec("chmod u+x "+FILENAME);
그러나 당신이 그것을 더 명시 적으로 추적하고 싶다면 stdin / stderr를 캡처 할 수 있습니다.
Process p = Runtime.getRuntime().exec("chmod u+x "+FILENAME);
BufferedReader stdInput = new BufferedReader(new InputStreamReader(p.getInputStream()));
BufferedReader stdError = new BufferedReader(new InputStreamReader(p.getErrorStream()));
내가 여기서 얻은 것 :http://www.devdaily.com/java/edu/pj/pj010016/pj010016.shtml
업데이트:
테스트 프로그램 :
package junk;
import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.IOException;
import java.io.Writer;
public class Main{
private String scriptContent = '#!/bin/bash \n echo "yeah toast!" > /tmp/toast.txt';
public void doIt(){
try{
Writer output = new BufferedWriter(new FileWriter("/tmp/toast.sh"));
output.write(scriptContent);
output.close();
Runtime.getRuntime().exec("chmod u+x /tmp/toast.sh");
}catch (IOException ex){}
}
public static void main(String[] args){
Main m = new Main();
m.doIt();
}
}
Linux에서 파일 브라우저를 열고 /tmp/toast.sh를 두 번 클릭하고 실행하도록 선택하면 'Yeah Toast'라는 단어와 함께 텍스트 파일 /tmp/toast.txt를 생성해야합니다. 나는 Mac이 후드 아래 BSD이기 때문에 똑같이 할 것이라고 생각합니다.
다른 팁
전화해도됩니다 File.setExecutable()
파일에 대한 소유자의 실행 파일 비트를 설정하려면 경우에 충분할 수 있습니다. 아니면 그냥 할 수 있습니다 chmod
시스템 호출과 함께 직접 Process
.
ALAS, 파일 권한의 최대 구동 프로그래밍 변경 사항은 Java 7까지 사용할 수 없습니다. 새로운 IO 기능 세트의 일부가 될 것입니다. 여기.
Java 7에서는 전화 할 수 있습니다 Files.setPosixFilePermissions
. 예는 다음과 같습니다.
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.nio.file.attribute.PosixFilePermission;
import java.util.Set;
class FilePermissionExample {
public static void main(String[] args) throws IOException {
final Path filepath = Paths.get("path", "to", "file.txt");
final Set<PosixFilePermission> permissions = Files.getPosixFilePermissions(filepath);
permissions.add(PosixFilePermission.OWNER_EXECUTE);
Files.setPosixFilePermissions(filepath, permissions);
}
}
Mac OS X에서는 chmod +x 외에 .command
쉘 스크립트로 확장하여 두 번 클릭하여 시작하려면.
이 답변 나는 그 질문에 썼다 프로그래밍 방식으로 파일 권한을 어떻게 변경합니까? Mac OS X에서 작동 해야하는 JNA를 사용하여 기본 호출을 통해 CHMOD 예제를 보여줍니다.