在Linux shell脚本我使用下面的行来获取所有服务的列表,以便我可以find哪些是进一步运行或不,如果不是,那么我将尝试启动它们,如果无法启动,然后login条目。
service_array =($(service --status-all | rev | cut -d“”-f 1 | rev))
但对于在下标中有问号的服务,则不需要下面的条目。
[? ] appport
[? ]控制台设置
对于这些条目,它只是在控制台上输出,而不是在数组中input。 那么上面的问题是什么呢?
如何将YYYYMMDDHHMMSS转换为`date`可读的date
尝试运行python35脚本时使用nohup?
Java执行运行守护进程脚本的Bash脚本
如何根据第六栏的内容来勾选行
bash使用getopts
在grep中转义感叹号?
Grep在Linux中的一个列上
一个更好的Linux shell?
grep awk忽略字符
尝试:
service_array=($(exec service --status-all | sed 's|.* ||'))
或更好:
readarray -t service_array < <(exec service --status-all | sed 's|.* ||')
没有sed:
readarray -t service_array < <(exec service --status-all) service_array=("${service_array[@]##* }")
完后还有:
service_array=() while read service; do service_array+=("$service"); done < <(exec service --status-all | sed 's|.* ||')
要么
service_array=() while read service; do service_array+=("$service"); done < <(exec service --status-all) service_array=("${service_array[@]##* }")
而sed的另一种选择是使用awk :
... | awk '{ print $NF }'
这是因为你的管道没有处理标准的错误输出。 这个? 意味着该服务具有未知状态并被写入stderr 。 不幸的是,这个信息缺乏man service 。
什么--status-all检查是否status正在处理作为参数在服务的相应的/ /etc/init.d脚本。 如果不是,则打印[ ? ] [ ? ]到标准错误。
你的命令管道将会捕获所有的状态,如果你像这样运行它:
service_array=($(service --status-all 2>&1|rev|cut -d " " -f 1|rev))
如果你只想知道状态:
service_array=($(service --status-all 2>/dev/null|rev|cut -d " " -f 1|rev))
如果你只想要未知的状态:
service_array=($(service --status-all 2>&1 1>/dev/null|rev|cut -d " " -f 1|rev))
行尾可能有空格。 我会更好地使用这个
echo -e '[ ? ] appportn[ ? ] console-setup' | grep -o '[^ ]+[[:blank:]]*$'
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。