如何避免dotnet-script拦截脚本传入的参数?
解决dotnet-script拦截自定义参数的问题
使用dotnet-script时,脚本预期接收的参数(比如-v)会被dotnet-script本身拦截,导致脚本无法获取该参数,反而输出dotnet-script的版本号。示例脚本和输入输出如下:
示例脚本:
#!/usr/bin/env dotnet-script Console.WriteLine($"Hello World:\n{string.Join('\n', Args)}");
输入输出示例:
> ./script.csx "hi again" Hello World: hi again > ./script.csx "hi again" -v 1.4.0
彻底避免参数拦截的方法
要让dotnet-script不再拦截任何参数,直接将所有参数传递给脚本,可通过以下两种方式实现:
方式1:调用时添加分隔符--
执行脚本时,用--作为dotnet-script和自定义参数的分隔符,它会告知dotnet-script将后续所有参数原封不动传递给脚本。
示例命令:
> ./script.csx "hi again" -- -v
此时输出为:
Hello World: hi again -v
方式2:修改脚本shebang行(永久生效)
修改脚本头部的shebang行,显式添加--,这样直接执行脚本时,所有参数都会自动传递给脚本,无需每次手动添加分隔符。
修改后的脚本:
#!/usr/bin/env dotnet-script -- Console.WriteLine($"Hello World:\n{string.Join('\n', Args)}");
此时执行原命令:
> ./script.csx "hi again" -v
会得到预期输出:
Hello World: hi again -v
内容的提问来源于stack exchange,提问作者Dov
相关产品推荐
相关产品推荐

