diff --git a/src/Dotnet.Script.Core/Scaffolder.cs b/src/Dotnet.Script.Core/Scaffolder.cs index 78cb9339..ef66970a 100644 --- a/src/Dotnet.Script.Core/Scaffolder.cs +++ b/src/Dotnet.Script.Core/Scaffolder.cs @@ -63,7 +63,7 @@ public void CreateNewScriptFile(string fileName, string currentDirectory) RuntimeInformation.IsOSPlatform(OSPlatform.Linux)) { // mark .csx file as executable, this activates the shebang to run dotnet-script as interpreter - _commandRunner.Execute($"/bin/chmod", $"+x {pathToScriptFile}"); + _commandRunner.Execute($"/bin/chmod", $"+x \"{pathToScriptFile}\""); } _scriptConsole.WriteSuccess($"...'{pathToScriptFile}' [Created]"); } diff --git a/src/Dotnet.Script.Tests/ScaffoldingTests.cs b/src/Dotnet.Script.Tests/ScaffoldingTests.cs index c5dcd506..0c8f48cf 100644 --- a/src/Dotnet.Script.Tests/ScaffoldingTests.cs +++ b/src/Dotnet.Script.Tests/ScaffoldingTests.cs @@ -34,6 +34,24 @@ public void ShouldInitializeScriptFolder() } } + [Fact] + public void ShouldInitializeScriptFolderContainingWhitespace() + { + using (var scriptFolder = new DisposableFolder()) + { + var path = Path.Combine(scriptFolder.Path, "Folder with whitespace"); + Directory.CreateDirectory(path); + + var (output, exitCode) = ScriptTestRunner.Default.Execute("init", path); + + Assert.Equal(0, exitCode); + Assert.DoesNotContain("No such file or directory", output, StringComparison.OrdinalIgnoreCase); + Assert.True(File.Exists(Path.Combine(path, "main.csx"))); + Assert.True(File.Exists(Path.Combine(path, "omnisharp.json"))); + Assert.True(File.Exists(Path.Combine(path, ".vscode", "launch.json"))); + } + } + [OnlyOnUnixFact] public void ShouldRegisterToRunCsxScriptDirectly() {