]> granicus.if.org Git - zfs/commitdiff
Fix zed io-spare.sh dash incompatibility
authorChris Dunlap <cdunlap@llnl.gov>
Thu, 11 Sep 2014 22:41:35 +0000 (15:41 -0700)
committerBrian Behlendorf <behlendorf1@llnl.gov>
Tue, 23 Sep 2014 22:32:30 +0000 (15:32 -0700)
The zed's io-spare.sh script defines a vdev_status() function to query
the 'zpool status' output for obtaining the status of a specified vdev.
This function contains a small awk script that uses a parameter
expansion (${parameter/pattern/string}) supported in bash but not
in dash.  Under dash, this fails with a "Bad substitution" error.

This commit replaces the awk script with a (hopefully more portable)
sed script that has been tested under both bash and dash.

Signed-off-by: Chris Dunlap <cdunlap@llnl.gov>
Signed-off-by: Brian Behlendorf <behlendorf1@llnl.gov>
Closes #2536

cmd/zed/zed.d/io-spare.sh

index dd5bf4e0f226f5934bae68a2a692503084f26395..894817317ab5d5d9a3cba9f3667cdd53a2bc7d28 100755 (executable)
@@ -54,10 +54,11 @@ flock -x 8
 # Given a <pool> and <device> return the status, (ONLINE, FAULTED, etc...).
 vdev_status() {
        local POOL=$1
-       local VDEV=`basename $2`
+       local VDEV=$2
+       local T='       '       # tab character since '\t' isn't portable
 
-       ${ZPOOL} status ${POOL} | \
-           awk -v pat="${VDEV}|${VDEV/-part?}" '$0 ~ pat { print $1" "$2 }'
+       ${ZPOOL} status ${POOL} | sed -n -e \
+           "s,^[ $T]*\(.*$VDEV\(-part[0-9]\+\)\?\)[ $T]*\([A-Z]\+\).*,\1 \3,p"
        return 0
 }