protected bool HasShebang([NotNull] FileInfo file, [NotNull, Localizable(false)] string interpreter)
{
#region Sanity checks
if (file == null) throw new ArgumentNullException(nameof(file));
if (string.IsNullOrEmpty(interpreter)) throw new ArgumentNullException(nameof(interpreter));
#endregion
if (!IsExecutable(file.FullName)) return false;
string firstLine = file.ReadFirstLine(Encoding.ASCII);
if (string.IsNullOrEmpty(firstLine)) return false;
return
firstLine.StartsWith(@"#!/usr/bin/" + interpreter) ||
firstLine.StartsWith(@"#!/usr/bin/env " + interpreter);
}
#endregion