[英]Bash here document - suppress printing code to the screen?
我正在編寫一個腳本,以通過cmd“ sudo / etc / bgenomics”(由我們的管理員設置)成為用戶(我們稱之為基因組學),並以該用戶身份運行一些bash代碼,即運行cmd,捕獲出口代碼並采取適當的措施。
問題在於,這里doc中的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”。 能做到嗎
另一個進程正在調用此腳本嗎? 除非使用'-x'調用bash,否則通常不會出現輸出。 如果無法在調用過程中禁用回顯,請嘗試修改腳本的第一行:
#!/bin/bash +x
您可能還希望在sudo命令之后刪除對/ bin / bash的調用,除非您確實希望在shell中啟動另一個shell。
這里的文檔通過其標准輸入將輸入提供給bgenomics
腳本。 輸入的結果取決於該腳本。
如果要腳本打印其某些輸入,而不打印其某些輸入,則必須修改腳本。
如果bgenomics
實際上是一個交互式shell會話的包裝器(看起來好像是通過Script started
和Script done
跟蹤來判斷的),那么這里的文檔並不是將輸入反饋到其中的最佳方法。
一個好的方法是使用expect
實用程序,該實用程序通過偽終端設備控制交互式程序,並提供具有大量控制權的腳本語言。 expect
可以抑制來自交互式程序的所有不需要的輸入。 它可以從程序中查找特定的輸出,並提供響應。 例如,它可以查找來自交互式會話的login:
字符串,並發送用戶名。
程序bgenomics
有一個script
調用,以記錄腳本的操作。 與負責人交談,以了解他們的意圖。 在您了解bgenomics
的目的之前,您可能會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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.