我需要以root身份运行我的程序。我看了this问题,但它有点有效。我需要使用stdin并使用bash脚本似乎不接受stdin。我正在使用Eclipse和Ubuntu。有任何想法吗?这也会导致其他Java程序出现问题,因为它们也不接受stdin。
如果您运行此代码:
import java.io.IOException;
public class Test {
public static void main(String[] args) {
while (true) {
try {
System.out.print((char) System.in.read());
}
catch (IOException e) {
e.printStackTrace();
}
}
}
}
他们在控制台中键入内容并按Enter键,输出您输入的内容。
当我使用bash脚本时:
#!/bin/bash
# file: /usr/lib/jvm/java-8-oracle/bin/java
# descr: Starter for jdk. Runs jdk as root when
# cmd-line-arg "--run-as-root" is specified.
#
jre="/usr/lib/jvm/java-8-oracle/bin/java.ori"
run_as_root=false
args=
# Filter command-line argument
for arg in "$@"
do
case "$arg" in
--run-as-root) run_as_root=true
;;
*) args="$args $arg"
;;
esac
done
# Remove leading whitespaces
args=$(echo $args | sed -e 's/^[ \t]*//')
if $run_as_root
then
echo "WARNING: Running as root!"
gksu "$jre $args"
else
$jre $args
fi
我得到了一堆奇怪的字符,当我删除char cast时,我得到-1,意思是流的结束。
答案 0 :(得分:0)
如果从Eclipse中运行它,Eclipse将启动该程序。这意味着您需要以root身份登录,或者需要重新配置eclipse以使用sudo
。
以root身份登录更容易,因为它不需要任何额外的工作;然而,它也更具风险,因为你将你的系统暴露给程序中的错误和日食程序中的错误。
在sudo
下运行意味着您可能并不总是拥有控制台。安装程序后,情况会更加真实。我建议你现在就做它只是让它登录到一个文件,好像你正在处理低于1000端口的套接字,你可能正在编写一个类似的守护进程,并且它将在(完成之后)例行启动缺乏控制台的环境。