您现在的位置是:首页 > 网络趣梗网络趣梗

shell脚本可执行权限(执行shell脚本权限不够)

2022-08-21 22:18:26网络趣梗0人已围观

简介  shell脚本可执行权限(执行shell脚本权限不够),新营销网红网本栏目通过数据整理汇集了shell脚本可执行权限(执行shell脚本权限不够)相关信息,下面一起看看

  shell脚本可执行权限(执行shell脚本权限不够),新营销网红网本栏目通过数据整理汇集了shell脚本可执行权限(执行shell脚本权限不够)相关信息,下面一起看看。

  后台java可以通过运行时调用其他进程,如cmd命令、shell文件或脚本等。

  用法基本运行时执行时,返回一个Process对象,用于完成脚本执行。在下面的示例中,Linux的/home/目录中有一个脚本deletefile.sh,用于删除指定的日期文件。Java调用脚本如下。

   /* * *在指定日期删除文件* @ param date yyyy-MM-DD format */private static void set system date(string date){ process process=null;string command 1=/bin/sh/home/delete file . sh date;system . out . println(command 1);请尝试{process=Runtime.getRuntime()。exec(command 1);//必须等待进程结束,否则时间设置不会生效process . wait for();} catch(io exception

   interrupted exception e){ e . printstacktrace();}最后{如果(过程!=null){ process . destroy();}}}缓冲区满问题如果在脚本执行过程中产生了大量的控制台输出信息,这些信息会被Shell进程输出到内存缓冲区,而上述用法中作为父进程的java进程不处理缓冲区内容,那么缓冲区就会满,Java进程就会挂起。解决方法是使用Java线程读取Shell脚本的输出信息。

  公共静态列表String execute shell(String shpath,String var){//String shpath=/test/test . sh ;//sh path//String var= 201102 ;//sh参数字符串shellVar=(var==null)?’‘: var;string command 1= chmod 777 shpath;//为sh添加权限字符串command 2=/bin/sh sh path shellvar;最终列表字符串strList=new ArrayList字符串Process process1=nullBufferedReader in=null请尝试{process1=Runtime.getRuntime()。exec(command 1);//执行process1.waitFor()命令添加权限;//如果执行多条命令,最终进程process2=runtime.getruntime()。必须添加exec(command 2);//thread new thread(){ @ override public void run(){ buffered reader in=newbuffered reader(new inputstreamreader(process 2 . getinputstream()));String line=null试试{while((line=in.readLine())!=null){ strlist . add(line);} } catch(io exception e){ e . printstacktrace();}最后{ try { in . close();} catch(io exception e){ e . printstacktrace();}}}}.start();//thread new thread(){ @ override public void run(){ buffered reader err=newbuffered reader(newinputstreamreader(process 2 . get errorstream()));String line=null试试{while((line=err.readLine())!=null){ strlist . add(line);} } catch(io exception e){ e . printstacktrace();}最后{ try { err . close();} catch(io exception e){ e . printstacktrace();}}}}.start();process 2 . wait for();} catch(io exception e){ } catch(interrupted exception e){ } finally { if(in!=null){ try { in . close();} catch(io exception e){ } } if(process 1!=null){ process 1 . destroy();} }返回strList}线程阻塞问题如果执行的shell脚本中有等待输入的命令,比如more操作,那么在使用java进程读取缓冲区的内容时就会出现线程阻塞等待的问题。例如,以下脚本读取文件的内容。

   path=/home/software . infosofttype=$(more $ filepath)echo $ softtype上面三行代码只是简单的输出了一个文件的内容,而且这个文件很短,只有一行。在Linux下执行是没有问题的,但是如果用Java调用executeShell来执行,那么处理InputStream的线程就会出现阻塞等待的问题,这个问题根源于脚本中的more命令,它会等待控制台的输入,导致Java进程阻塞。解决方案是避免在shell脚本中使用更多的命令,而用cat命令来替换它。

  使用Process执行shell命令时,如果命令包含管道命令,直接执行将不会得到正确的结果。解决方法是使用/bin/sh,并将/bin/sh放在要执行的shell命令前面,以确保管道命令的正确执行。

   string command 1=/bin/sh ifconfig

   grep if=

   awk“{ print $ 1,$ 6 }”;启示用Java调用Shell明智吗?

  相关文章粤语歌网(经典粤语歌汇总)

  北京奥特莱斯(来北京必去的12家商场)

  英雄超级放肆(还记得英雄超级放肆吗?)

  龚自珍资料(清代诗人龚自珍生平事迹简介)

  象牙塔是什么意思?(“象牙塔”有什么不好?)

  彩色风信子(水培风信子容易养)

  京字怎么读?

  于吉是哪里人?(古代著名美女于吉在哪里?)

  三本事业单位(我们还有哪些“三本”?)

  电子酒柜(酒柜最全指南)

  德州景点(德州62个景点)

  玉兰油官网(玉兰油发布高端精华系列)

  更多shell脚本可执行权限(执行shell脚本权限不够)相关信息请关注本文章,本文仅仅做为展示!

Tags: 网络趣事  

很赞哦! ()

随机图文

留言与评论 (共有 条评论)
验证码:

本栏推荐