编程技术分享平台

网站首页 > 技术教程 正文

.NET 10 牛逼!Linux 以 Shebang 方式执行脚本

xnh888 2025-07-19 23:30:05 技术教程 5 ℃ 0 评论

需求:昨天看了张队在博客园发表的文章,无需创建项目 C# 单文件可以直接执行了。我们在 Linux 下执行一些任务的时候,可能需要编写 shell 脚本,对于不懂 shell 语言的人来说,写不出来或者有学习成本,如果自会 C# 语言,现在也可以通过 Shebang 格式来写一个脚本,在 Linux 服务器上面执行。

Linux Shebang

shebang(也称为 hashbang 或 pound-bang)是一个由井号(#)和感叹号(!)组成的字符序列(#!),它出现在Unix-like操作系统中的脚本文件的第一行。shebang用于指定执行该脚本的解释器。当一个脚本文件被执行时,操作系统会查找文件的第一行,如果发现shebang,它会使用指定的解释器来运行脚本。

如下列出了一些典型的shebang解释器指令:

  1. #!/bin/sh—使用sh,即Bourne shell或其它兼容shell执行脚本

  2. #!/bin/csh—使用csh,即C shell执行

  3. #!/usr/bin/perl -w—使用带警告的Perl执行

  4. #!/usr/bin/python -O—使用具有代码优化的Python执行

  5. #!/usr/bin/php—使用PHP的命令行解释器执行

复制代码


什么是 dotnet run app.cs?

.NET 10 Preview 4 中的一项新功能,它使 C# 的入门变得前所未有的轻松。现在,您可以直接使用 运行 C# 文件dotnet run app.cs。这意味着您无需再创建项目文件或搭建整个应用程序的框架即可运行快速脚本、测试代码片段或实验某个想法。它简单、直观,旨在简化 C# 开发体验,尤其适合刚入门的开发者。之前都是通过第三方开发者来填补这项空白(例如:cs-script、dotnet-script 等)。

到目前为止,使用dotnetCLI 执行 C# 代码需要包含文件的项目结构.csproj。借助这项新功能(我们称之为基于文件的应用),您可以直接运行独立.cs文件,就像使用 Python 或 JavaScript 等脚本语言一样。

备注:基于文件的应用仍然需要 .NET SDK 才能使用,因为它们仍然使用基于 MSBuild 的常规系统构建。如果您希望使用“dotnet run app.cs”运行基于文件的应用,则必须具备 .NET SDK

在 Linux 编写 C# 脚本

本文使用 Rocky Linux 9 系统进行测试,首先下载 .NET 10 SDK preview.5 到系统,命令如下:

  1. wget https://builds.dotnet.microsoft.com/dotnet/Sdk/10.0.100-preview.5.25277.114/dotnet-sdk-10.0.100-preview.5.25277.114-linux-x64.tar.gz

  2. mkdir -p /data/sdks/dotnet10

  3. tar -xzvf dotnet-sdk-10.0.100-preview.5.25277.114-linux-x64.tar.gz -C /data/sdks/dotnet10

复制代码


如下图:



简单代码

编写一个 hello.cs 脚本,代码如下:

  1. #!/data/sdks/dotnet10/dotnet run


  2. Console.WriteLine("Hello from C# script! 我是小渣渣");

复制代码


赋予执行权限,并执行,命令如下:

  1. chmod +x hello.cs

  2. ./hello.cs

复制代码


输出如下:



依赖 nuget 包代码

往往逻辑比较复杂,可能需要引入第三方 nuget 包,调用里面的函数才能完整我们的需求,可以使用 #:package 指令来引入 nuget 包,以 Newtonsoft.Json 为例,代码如下:

  1. #!/data/sdks/dotnet10/dotnet run


  2. #:package Newtonsoft.Json@13.0.3


  3. using Newtonsoft.Json;


  4. var output =
    JsonConvert.SerializeObject(new { name = "你好 .NET", version = "10" }, Formatting.Indented);

  5. Console.WriteLine(output);

复制代码


输出如下:



参考:


https://devblogs.microsoft.com/dotnet/announcing-dotnet-run-app/


https://www.cnblogs.com/shanyou/p/18930500


本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表