使用sed-in-shell函数自动编译和运行F#代码
我正在尝试制作一个bash脚本,以便从终端快速编译和运行F#代码。通常,如果您有一个名为使用sed-in-shell函数自动编译和运行F#代码,shell,sed,Shell,Sed,我正在尝试制作一个bash脚本,以便从终端快速编译和运行F#代码。通常,如果您有一个名为myCode.fsx的文件,那么执行此操作的方法是运行以下命令: fsharpc myCode.fsx && mono myCode.exe 我试图在shell中编写一个小函数来提供帮助,它将代码的文件名(包括.fsx)作为其第一个也是唯一的参数。但是我想我在使用Sed命令时遇到了一些问题。这是我的代码,它一开始很好地编译了.fsx-文件,但我认为Sed会进入并更改刚刚创建的myCode.e
myCode.fsx
的文件,那么执行此操作的方法是运行以下命令:
fsharpc myCode.fsx && mono myCode.exe
我试图在shell中编写一个小函数来提供帮助,它将代码的文件名(包括.fsx
)作为其第一个也是唯一的参数。但是我想我在使用Sed
命令时遇到了一些问题。这是我的代码,它一开始很好地编译了.fsx
-文件,但我认为Sed
会进入并更改刚刚创建的myCode.exe
-文件中的文本,而不是只更改要运行的终端命令中的文件扩展名:
function fsx {
fsharpc "$1" && mono | sed 's/fsx/exe/' "$1"
}
如何解决此问题?若要按开始时的方式解决此问题,您需要使用类似于管道的工具:
fsx() {
fsharpc "$1" && mono "$(sed 's/fsx$/exe/' <<< "$1")"
}
${1%fsx}
从$1
的末尾删除fsx
,只需附加exe
请注意,我使用了fsx()
而不是函数fsx
;前者为所有POSIX Shell所理解,后者为巴什主义
如果您确实使用Bash,那么还有另一个参数扩展可以更接近地表示“字符串末尾的替换模式”:
"${1/%fsx/exe}"
要按照开始的方式进行,您需要一个类似于管道而不是管道的东西:
fsx() {
fsharpc "$1" && mono "$(sed 's/fsx$/exe/' <<< "$1")"
}
${1%fsx}
从$1
的末尾删除fsx
,只需附加exe
请注意,我使用了fsx()
而不是函数fsx
;前者为所有POSIX Shell所理解,后者为巴什主义
如果您确实使用Bash,那么还有另一个参数扩展可以更接近地表示“字符串末尾的替换模式”:
"${1/%fsx/exe}"
非常感谢,第二种方法很有魅力。简单有效的回答。非常感谢,第二种方法很有魅力。简单有效的答案。