Hi,
in /usr/share/initramfs-tools/hook-functions, line 926, you invoke sh -n on hook scripts and skip hook scripts that fail to validate as sh scripts. This makes it effectively impossible to use a hook written in anything other than sh.
However, the section on hook scripts in initramfs-tools(8) doesn't say that scripts have to be valid Bourne shell scripts in order to be run.
I think it would be best to let the user deal with errors in their own hook scripts instead of almost-silently skipping the ones that were written in something other than `sh`.
The next-best thing would be to only invoke `sh -n` on sh scripts; e.g. something like this:
# skip bad syntax
if head -n 1 "${si_x}" | grep -Eq '^#!/bin/sh([[:space:]].*?)'; then
if ! sh -n "${si_x}" ; then
[ "${verbose}" = "y" ] \
&& echo "$si_x ignored: bad syntax" >&2
continue
fi
fi
As a last resort, you could amend the documentation to say that all hook scripts *must* be valid Bourne sh scripts; but I think it would be pretty backwards to forbid running "plugins" whose syntax the main script can't validate.
(Re "almost silently": I don't know where the "ignored: bad syntax" message goes, but it doesn't make it to the console. All I had was '/etc/initramfs-tools/hooks/myhook: 50: Syntax error: "(" unexpected'.)
András