#!/bin/sh -e if [ -f "$__object/parameter/file" ] then file="$( cat "$__object/parameter/file" )" else file="/$__object_id" fi script="$( cat "$__object/parameter/script" )" if [ "$script" = '-' ] then script="$( cat "$__object/stdin" )" fi # since stdin is not available in explorer, we pull file from target with explorer file_from_target="$__object/explorer/file" sed_cmd='sed' if [ -f "$__object/parameter/regexp-extended" ] then sed_cmd="$sed_cmd -E" fi # do sed dry run, diff result and if no change, then there's nothing to do # also redirect diff's output to stderr for debugging purposes if echo "$script" | "$sed_cmd" -f - "$file_from_target" | diff -u "$file_from_target" - >&2 then exit 0 fi # we can't use -i, because it's not posix, so we fly with tempfile and cp # and we use cp because we want to preserve destination file's attributes # shellcheck disable=SC2016 echo 'tmp="$__object/tempfile"' echo "$sed_cmd -f - '$file' > \"\$tmp\" << EOF" echo "$script" echo 'EOF' echo "cp \"\$tmp\" '$file'" # shellcheck disable=SC2016 echo 'rm -f "$tmp"' echo 'change' >> "$__messages_out" if [ -f "$__object/parameter/onchange" ] then cat "$__object/parameter/onchange" fi