簡體   English   中英

在此處重擊文檔-禁止在屏幕上打印代碼?

[英]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 startedScript 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM