diff --git a/.github/workflows/codeql.yml b/.github/workflows/codeql.yml
index 0f9354d..f5d7731 100644
--- a/.github/workflows/codeql.yml
+++ b/.github/workflows/codeql.yml
@@ -25,16 +25,16 @@ jobs:
uses: actions/checkout@v4
- name: Initialize CodeQL
- uses: github/codeql-action/init@v3
+ uses: github/codeql-action/init@v2
with:
languages: ${{ matrix.language }}
# Details on CodeQL's query packs refer to : https://docs.github.com/en/code-security/code-scanning/automatically-scanning-your-code-for-vulnerabilities-and-errors/configuring-code-scanning#using-queries-in-ql-packs
# queries: security-extended,security-and-quality
- name: Autobuild
- uses: github/codeql-action/autobuild@v3
+ uses: github/codeql-action/autobuild@v2
- name: Perform CodeQL Analysis
- uses: github/codeql-action/analyze@v3
+ uses: github/codeql-action/analyze@v2
with:
category: "/language:${{matrix.language}}"
diff --git a/Directory.Build.props b/Directory.Build.props
deleted file mode 100644
index 93d5ad5..0000000
--- a/Directory.Build.props
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
- $(MSBuildThisFileDirectory)artifacts
-
-
diff --git a/README.md b/README.md
index 246bb32..ab7118b 100644
--- a/README.md
+++ b/README.md
@@ -33,19 +33,18 @@ _**NOTE**_: The option `-p:PublishTrimmed=true` may produce some *warnings*. If
```sh
USAGE:
- scrl [path] [OPTIONS]
+ scrl [OPTIONS]
ARGUMENTS:
- [path] Starting directory (Default: .)
+ Starting directory (Default: .)
OPTIONS:
- DEFAULT
- -h, --help Prints help information
- -x, --extensions List of script extensions to search for
- -d, --depth 3 Search depth
- -e, --elevated Run with elevated privileges
- -g, --group Group scripts by folder
- -b, --brief Show brief information
+ -h, --help Prints help information
+ -x, --extensions Comma separated list of script extensions
+ -d, --depth Search depth
+ -e, --elevated Run with elevated privileges
+ -g, --group Group scripts by folder
+ -b, --brief Show brief information
```
[CLI]: https://docs.microsoft.com/en-us/dotnet/core/tools/ ".NET CLI Docs"
diff --git a/src/Commands.cs b/src/Commands.cs
index ed0b950..4be0a59 100644
--- a/src/Commands.cs
+++ b/src/Commands.cs
@@ -1,5 +1,5 @@
using System.ComponentModel;
-using System.Diagnostics.CodeAnalysis;
+
using Spectre.Console;
using Spectre.Console.Cli;
@@ -76,30 +76,27 @@ public sealed class RootCommand : AsyncCommand
public sealed class RootCommandSettings : CommandSettings
{
- [Description("List of script extensions to search for")]
- [CommandOption("-x|--extensions ")]
- [SuppressMessage("Performance", "CA1819:Properties should not return arrays")]
- public string[] Extensions { get; init; } = [".ps1", ".*sh", ".bat", ".cmd", ".nu"];
+ [Description("Comma separated list of script extensions")]
+ [CommandOption("-x|--extensions")]
+ public string? Extensions { get; init; }
[Description("Search depth")]
[CommandOption("-d|--depth")]
- [DefaultValue(3)]
- public int Depth { get; init; }
+ public int Depth { get; init; } = 1;
[Description("Run with elevated privileges")]
[CommandOption("-e|--elevated")]
- public bool Elevated { get; init; }
+ public bool Elevated { get; init; } = false;
[Description("Group scripts by folder")]
[CommandOption("-g|--group")]
- public bool Group { get; init; }
+ public bool Group { get; init; } = false;
[Description("Show brief information")]
[CommandOption("-b|--brief")]
- public bool Brief { get; init; }
+ public bool Brief { get; init; } = false;
[Description("Starting directory (Default: .)")]
- [CommandArgument(0, "[path]")]
- [DefaultValue(".")]
- public string Directory { get; init; } = string.Empty;
-}
+ [CommandArgument(0, "")]
+ public string Directory { get; init; } = ".";
+}
\ No newline at end of file
diff --git a/src/Program.cs b/src/Program.cs
index 836c56b..f53f375 100644
--- a/src/Program.cs
+++ b/src/Program.cs
@@ -2,6 +2,5 @@ using ScriptLauncher;
using Spectre.Console.Cli;
var app = new CommandApp();
-app.Configure(static x => x.SetApplicationName("scrl"));
-
+app.Configure(x => x.SetApplicationName("scrl"));
return app.Run(args);
diff --git a/src/ScriptExecutor.cs b/src/ScriptExecutor.cs
index a1d14aa..77e1fe0 100644
--- a/src/ScriptExecutor.cs
+++ b/src/ScriptExecutor.cs
@@ -26,55 +26,36 @@ internal static class ScriptExecutor
).ConfigureAwait(ConfigureAwaitOptions.None);
}
- private static string GetElevationVerb(bool elevated)
- {
- if (!elevated)
+ private static ProcessStartInfo? GetExecutableProcessInfo(FileInfo file, bool elevated) =>
+ file.Extension switch
{
- return string.Empty;
- }
-
- var platform = Environment.OSVersion.Platform;
- return platform switch
- {
- PlatformID.Win32NT => "runas /user:Administrator",
- PlatformID.Unix or PlatformID.MacOSX => "sudo",
- _ => string.Empty,
+ ".bat"
+ or ".cmd"
+ => new ProcessStartInfo
+ {
+ FileName = "cmd",
+ Arguments = $"/Q /C .\\{file.Name}",
+ Verb = elevated ? "runas /user:Administrator" : string.Empty,
+ WorkingDirectory = file.DirectoryName
+ },
+ ".ps1"
+ => new ProcessStartInfo
+ {
+ FileName = "powershell.exe",
+ Arguments = $"-NoProfile -ExecutionPolicy Bypass -File .\\{file.Name}",
+ Verb = elevated ? "runas /user:Administrator" : string.Empty,
+ WorkingDirectory = file.DirectoryName
+ },
+ ".sh"
+ or ".zsh"
+ or ".fish"
+ => new ProcessStartInfo
+ {
+ FileName = "sh",
+ Arguments = $"-c ./{file.Name}",
+ Verb = elevated ? "sudo" : string.Empty,
+ WorkingDirectory = file.DirectoryName
+ },
+ _ => null
};
- }
-
- private static ProcessStartInfo? GetExecutableProcessInfo(FileInfo file, bool elevated)
- {
- var verb = GetElevationVerb(elevated);
- return file.Extension switch
- {
- ".bat" or ".cmd" => new ProcessStartInfo
- {
- FileName = "cmd",
- Arguments = $"/Q /C ./{file.Name}",
- Verb = verb,
- WorkingDirectory = file.DirectoryName,
- },
- ".ps1" => new ProcessStartInfo
- {
- FileName = "powershell.exe",
- Arguments = $"-NoProfile -ExecutionPolicy Bypass -File ./{file.Name}",
- Verb = verb,
- WorkingDirectory = file.DirectoryName,
- },
- ".nu" => new ProcessStartInfo
- {
- FileName = "nu",
- Arguments = $"--no-config-file ./{file.Name}",
- Verb = verb,
- WorkingDirectory = file.DirectoryName,
- },
- _ => new ProcessStartInfo
- {
- FileName = "sh",
- Arguments = $"-c ./{file.Name}",
- Verb = verb,
- WorkingDirectory = file.DirectoryName,
- },
- };
- }
}
diff --git a/src/ScriptFinder.cs b/src/ScriptFinder.cs
index e7040f4..3ea2f4a 100644
--- a/src/ScriptFinder.cs
+++ b/src/ScriptFinder.cs
@@ -2,15 +2,23 @@ namespace ScriptLauncher;
internal readonly struct ScriptFinder
{
- public IEnumerable Extensions { get; }
+ private static readonly string[] DefaultExtensions = new[] { ".ps1", ".*sh", ".bat", ".cmd" };
+ private static readonly char[] DefaultSeparators = new[] { ',', ' ' };
+
+ public string[] Extensions { get; }
public string RootDirectory { get; }
- private int Depth { get; }
+ public int Depth { get; }
private readonly EnumerationOptions _options;
- public ScriptFinder(IEnumerable extensions, string directory, int depth)
+ public ScriptFinder(string? extensions, string directory, int depth)
{
- Extensions = extensions.ToHashSet().Select(static x => $".{x.TrimStart('.')}");
+ Extensions =
+ extensions
+ ?.Split(DefaultSeparators, StringSplitOptions.RemoveEmptyEntries)
+ .ToHashSet()
+ .Select(x => $".{x.TrimStart('.')}")
+ .ToArray() ?? DefaultExtensions;
Depth = depth;
RootDirectory = directory;
@@ -28,7 +36,7 @@ internal readonly struct ScriptFinder
try
{
var filenames = Directory.GetFiles(RootDirectory, $"*{extension}", _options);
- return filenames.Select(static x => new FileInfo(x));
+ return filenames.Select(x => new FileInfo(x));
}
catch (UnauthorizedAccessException)
{
@@ -37,13 +45,13 @@ internal readonly struct ScriptFinder
}
public FileInfo[] GetScripts() =>
- Extensions.Select(GetScriptFilesWithExtension).SelectMany(static x => x).ToArray();
+ Extensions.Select(GetScriptFilesWithExtension).SelectMany(x => x).ToArray();
public IDictionary GetScriptsByDirectory() =>
Extensions
.Select(GetScriptFilesWithExtension)
- .SelectMany(static x => x)
- .GroupBy(static x => x.DirectoryName!)
- .OrderBy(static x => x.Key)
- .ToDictionary(static x => new DirectoryInfo(x.Key), static x => x.ToArray());
+ .SelectMany(x => x)
+ .GroupBy(x => x.DirectoryName!)
+ .OrderBy(x => x.Key)
+ .ToDictionary(x => new DirectoryInfo(x.Key), x => x.ToArray());
}
diff --git a/src/ScriptLauncher.csproj b/src/ScriptLauncher.csproj
index 985e1e3..7784893 100644
--- a/src/ScriptLauncher.csproj
+++ b/src/ScriptLauncher.csproj
@@ -1,12 +1,12 @@
-
+
Exe
- net8.0
+ net8.0
enable
enable
All
- 0.1.7
+ 0.1.5
true
Tool to find and exec shell scripts
README.md
@@ -14,8 +14,8 @@
-
-
+
+