2017-09-14 33 views
2

我想弄清楚如何让脚本运行得更具可读性。我有多个我想从实际输出中分离出来的命令。如何将重定向字符(“<" and ">”)传递给命令?

我的第一个想法是使用set -x,但是在实际命令的输出之间仍然丢失了。所以,我发现和应用了两个Bash函数,我每个函数调用之前:

#!/usr/bin/env bash 

function c_echo(){ 
    local color=$1; 
    shift 
    local [email protected]; 
    if ! [[ $color =~ '^[0-9]$' ]] ; then 
     case $(echo $color | tr '[:upper:]' '[:lower:]') in 
     black) color=0 ;; 
     red) color=1 ;; 
     green) color=2 ;; 
     yellow) color=3 ;; 
     blue) color=4 ;; 
     magenta) color=5 ;; 
     cyan) color=6 ;; 
     white|*) color=7 ;; # white or invalid color 
     esac 
    fi 
    tput setaf $color; 
    echo $exp; 
    tput sgr0; 
} 

function script_cmd() { 
    c_echo YELLOW "\$ [email protected]"; 
    "[email protected]"; 
} 

export -f script_cmd 
export -f c_echo 

后来我的剧本里:

c_echo GREEN "1. Download insulin (2HIU) and Leucine zipper (2ZTA)." 

script_cmd wget https://files.rcsb.org/view/2HIU.cif 

这工作完全,但未能在其实际做重定向命令。有没有办法解决这个问题?

script_cmd charmm <setup_2zta.inp> setup_2zta.out 

回答

1

可以将丰富多彩的输出重定向到标准错误

function script_cmd() { 
    c_echo YELLOW "\$ [email protected]" >&2 
    #      ^^^ 
    "[email protected]"; 
} 

如果你想上色整个charmm <setup_2zta.inp> setup_2zta.out命令,您可以

script_cmd bash -c 'charmm <setup_2zta.inp> setup_2zta.out' 

function script_cmd() { 
    c_echo YELLOW "\$ [email protected]" >&2 
    #      ^^^ 
    eval "[email protected]"; 
    #^^^ 
} 

script_cmd 'charmm <setup_2zta.inp> setup_2zta.out' 
+0

但我也必须输入输入命令吗?我认为这是缺少的 –

+0

对不起,我不明白你的意思。 “管道输入命令”是什么意思? – pynexj

+0

你是否意味着你想为''charmm setup_2zta.out“'整个字符串着色? – pynexj

相关问题