我如何在 bash 脚本中打印出 rpm sudo --version
how do i print out rpm sudo --version in bash script
#!/bin/bash
if rpm -q sudo > /dev/null; then
echo "sudo is installed and version is"
else
echo "sudo is not installed"
fi
你好想知道是否可以在检查安装后打印出我的 sudo 版本。如果有办法,我该怎么做
sudo --version
输出必须被解析,return 状态用于确定它是否已安装。
首先,无论活动系统区域设置如何,您都希望版本输出保持一致。
所以你用LANG=C sudo --version
调用它。
这会打印多行,只有第一行最后一个元素是 sudo 版本:
Sudo version 1.9.5p2
Sudoers policy plugin version 1.9.5p2
Sudoers file grammar version 48
Sudoers I/O plugin version 1.9.5p2
Sudoers audit plugin version 1.9.5p2
使用POSIX-shell语法,行和字段解析必须使用外部工具来完成。这里 awk
能够一次解析所有内容:
#!/usr/bin/env sh
# Captures version string parsed with awk:
# so only last entry of first line is captured
if sudo_version=$(LANG=C sudo --version 2>/dev/null | awk 'NR==1{print $NF}')
then printf 'sudo is installed and version is %s\n' "$sudo_version"
else printf 'sudo is not installed\n' >&2
fi
如果使用 Bash,将第一行捕获到数组中,避免使用外部工具和管道分叉过程:
#!/usr/bin/env bash
# Capture version string first line into a Bash array
if read -ra version_array < <(LANG=C sudo --version 2>/dev/null)
then
# Version is the last element of array
printf 'sudo is installed and version is %s\n' "${version_array[-1]}"
else
printf 'sudo is not installed\n' >&2
fi
#!/bin/bash
if rpm -q sudo > /dev/null; then
echo "sudo is installed and version is"
else
echo "sudo is not installed"
fi
你好想知道是否可以在检查安装后打印出我的 sudo 版本。如果有办法,我该怎么做
sudo --version
输出必须被解析,return 状态用于确定它是否已安装。
首先,无论活动系统区域设置如何,您都希望版本输出保持一致。
所以你用LANG=C sudo --version
调用它。
这会打印多行,只有第一行最后一个元素是 sudo 版本:
Sudo version 1.9.5p2
Sudoers policy plugin version 1.9.5p2
Sudoers file grammar version 48
Sudoers I/O plugin version 1.9.5p2
Sudoers audit plugin version 1.9.5p2
使用POSIX-shell语法,行和字段解析必须使用外部工具来完成。这里 awk
能够一次解析所有内容:
#!/usr/bin/env sh
# Captures version string parsed with awk:
# so only last entry of first line is captured
if sudo_version=$(LANG=C sudo --version 2>/dev/null | awk 'NR==1{print $NF}')
then printf 'sudo is installed and version is %s\n' "$sudo_version"
else printf 'sudo is not installed\n' >&2
fi
如果使用 Bash,将第一行捕获到数组中,避免使用外部工具和管道分叉过程:
#!/usr/bin/env bash
# Capture version string first line into a Bash array
if read -ra version_array < <(LANG=C sudo --version 2>/dev/null)
then
# Version is the last element of array
printf 'sudo is installed and version is %s\n' "${version_array[-1]}"
else
printf 'sudo is not installed\n' >&2
fi