对将用作数组引用的变量使用bash命令

时间:2015-06-26 12:15:55

标签: bash

简短直接,基本上我想在变量上使用$command的值,而不是在while循环中使用它作为命令本身。所以:

这是作品,但我认为这很难看:

#!/bin/bash
IFS=$'\n'
lsof=`which lsof`
whoami=`whoami`

while true ; do
    execution_array=($(${lsof} -iTCP -P 2> /dev/null | grep ':' | grep ${whoami} | awk '{print $9}'  | cut -f2 -d'>' | sort  | uniq ))
    for i in ${execution_array[*]}; do
        echo $i
    done
    sleep 1
done
unset IFS

这不起作用(没有输出),但我认为不那么难看:

#!/bin/bash
IFS=$'\n'
lsof=`which lsof`
whoami=`whoami`
command="${lsof} -iTCP -P 2> /dev/null | grep ':' | grep ${whoami} | awk '{print $9}'  | cut -f2 -d'>' | sort  | uniq"
while true ; do
    execution_array=($(command))
    for i in ${execution_array[*]}; do
        echo $i
    done
    sleep 1
done
unset IFS

1 个答案:

答案 0 :(得分:0)

这解决了我的问题:

#!/bin/bash
IFS=$'\n'

lsof=$(which lsof)

list_connections() {
    ${lsof} -iTCP -P 2> /dev/null | grep ':' | grep $(whoami) | awk '{print $9}'  | cut -f2 -d'>' | sort  | uniq
}
while true ; do
    execution_array=($(list_connections))
    for i in ${execution_array[*]}; do
        echo $i
    done
    sleep 1
done
unset IFS