首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何使用printf将部分输入传递给shell脚本以自动运行?

如何使用printf将部分输入传递给shell脚本以自动运行?
EN

Stack Overflow用户
提问于 2019-02-20 05:43:43
回答 1查看 0关注 0票数 0

我已经将许多带有printf的输入传递给shell脚本,因为很长时间自动运行脚本如下所示:

printf '3\n4\n' | sh add_two_numbers.sh

如果我在命令脚本上运行,则输出7是正确的。

如果我运行如下脚本:

sh add_two_numbers.sh

它会在运行时请求两个数字并正确添加它们。

我的问题是如果我只知道几个输入(不是脚本所需的全部内容)如何在命令中传递它们并让脚本在运行时请求休息

printf '3\n' | sh add_two_numbers.sh

我的要求是在执行上述命令后,脚本应该询问第二个号码,而不是要求它给出以下错误:

Exception in thread "main" java.lang.NullPointerException: Cannot invoke method readLine() on null object
        at org.codehaus.groovy.runtime.NullObject.invokeMethod(NullObject.java:77)
        at org.codehaus.groovy.runtime.callsite.PogoMetaClassSite.call(PogoMetaClassSite.java:45)
        at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCall(CallSiteArray.java:45)
        at org.codehaus.groovy.runtime.callsite.NullCallSite.call(NullCallSite.java:32)
        at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCall(CallSiteArray.java:45)
        at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:108)
        at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:116)
        at com.tcs.mswitch.installer.Install.readFromConsole(Install.groovy:62)
        at com.tcs.mswitch.installer.Install.getValue(Install.groovy:24)
        at com.tcs.mswitch.installer.Install$getValue.call(Unknown Source)
        at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCall(CallSiteArray.java:45)
        at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:108)
        at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:116)
        at com.tcs.mswitch.installer.PostInstaller$_doPostInstall_closure2.doCall(PostInstaller.groovy:82)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:95)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:55)
        at java.lang.reflect.Method.invoke(Method.java:508)
        at org.codehaus.groovy.reflection.CachedMethod.invoke(CachedMethod.java:90)
        at groovy.lang.MetaMethod.doMethodInvoke(MetaMethod.java:233)
        at org.codehaus.groovy.runtime.metaclass.ClosureMetaClass.invokeMethod(ClosureMetaClass.java:272)
        at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:906)
        at groovy.lang.Closure.call(Closure.java:412)
        at groovy.lang.Closure.call(Closure.java:425)
        at org.codehaus.groovy.runtime.DefaultGroovyMethods.callClosureForLine(DefaultGroovyMethods.java:3880)
        at org.codehaus.groovy.runtime.IOGroovyMethods.eachLine(IOGroovyMethods.java:463)
        at org.codehaus.groovy.runtime.ResourceGroovyMethods.eachLine(ResourceGroovyMethods.java:246)
        at org.codehaus.groovy.runtime.ResourceGroovyMethods.eachLine(ResourceGroovyMethods.java:212)
        at org.codehaus.groovy.runtime.dgm$765.invoke(Unknown Source)
        at org.codehaus.groovy.runtime.callsite.PojoMetaMethodSite$PojoMetaMethodSiteNoUnwrapNoCoerce.invoke(PojoMetaMethodSite.java:271)
        at org.codehaus.groovy.runtime.callsite.PojoMetaMethodSite.call(PojoMetaMethodSite.java:53)
        at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCall(CallSiteArray.java:45)
        at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:108)
        at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:116)
        at com.tcs.mswitch.installer.PostInstaller.doPostInstall(PostInstaller.groovy:77)
        at com.tcs.mswitch.installer.PostInstaller.postInstallScript(PostInstaller.groovy:21)
        at com.tcs.mswitch.installer.PostInstaller$postInstallScript.call(Unknown Source)
        at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCall(CallSiteArray.java:45)
        at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:108)
        at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:116)
        at com.tcs.mswitch.installer.Install.main(Install.groovy:2844)

有没有办法实现我的目标?

EN

回答 1

Stack Overflow用户

发布于 2019-02-20 14:51:19

你可以试试这个:

{ printf '3\n'; cat; } | sh add_two_numbers.sh

由于缓冲,您可能必须终止您的输入,Ctrl-D并可能有其他副作用。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/-100005155

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档