我正在通过cmd“sudo / etc / bgenomics”编写一个脚本成为用户(让我们称之为基因组学)(这是由我们的管理员设置的)并运行一些bash代码作为该用户,即运行cmd,捕获退出代码并采取适当的措施。
问题是这里的文档中的bash代码被打印到屏幕上,这会分散注意力,看起来真的很不优雅。
以下是插图:
#!/bin/bash
name='George'
sudo /etc/bgenomics <<Q
/bin/bash
if (( 2 == 2 )); then
echo "my name is $name"
grep zzz /etc # will return nothing and $? = 1
echo \$? # this should be 1 after the above cmd
fi
Q
if语句就是为了表明打印时有多烦人。
现在,所有以下内容都会打印到屏幕上:
Script started, file is /var/tmp/genomicstraces/c060644.20140617143003.11536
Script done, file is /var/tmp/genomicstraces/c060644.20140617143003.11536
brainiac-login-02$brainiac-login-02$/bin/bash
bash-3.2$ if (( 2 == 2 )); then
> echo "my name is George"
> grep zzz /etc # will return nothing and 0 = 1
> echo $? # this should be 1 after the above cmd
> fi
my name is George
1
我想看到的唯一部分是“我的名字是乔治”和“1”。可以吗?
答案 0 :(得分:1)
是另一个进程调用此脚本吗?除非使用&#39; -x&#39;调用bash,否则输出通常不会出现。如果无法在调用过程中禁用echo,请尝试修改脚本的第一行:
#!/bin/bash +x
您可能还想在sudo命令之后删除对/ bin / bash的调用,除非您真的希望在shell中启动另一个shell。
答案 1 :(得分:1)
此处的文档通过其标准输入向bgenomics
脚本提供输入。该输入的内容取决于该脚本。
如果您希望脚本打印一些输入,而不打印某些输入,则必须修改脚本。
如果bgenomics
实际上是交互式shell会话的包装器(看起来像是Script started
和Script done
跟踪),那么这里的文档并不是最好的方法输入信息。
一种好方法是使用expect
实用程序,它通过伪终端设备控制交互式程序,并提供具有大量控制的脚本语言。 expect
可以抑制来自交互式程序的所有不需要的输入。它可以从程序中查找特定输出,并提供响应。例如,它可以查找来自交互式会话的login:
字符串,并发送用户名。
答案 2 :(得分:1)
程序bgenomics
在其中调用script
来记录脚本的作用。与负责人交谈以了解他们的意图。在你理解bgenomics
的目的之前,你有可能搞砸了那个作者试图做的事情。
$ script /tmp/junk.txt
Script started, file is /tmp/junk.txt
$ date # this is a child shell of the script command
Tue Jun 17 21:04:14 EDT 2014
$ exit
Script done, file is /tmp/junk.txt