我正在编写一个 CLI 脚本,它会在做一些事情之前询问一系列问题。如何将它们作为参数传递,以便每次我想测试我的脚本时都不必继续输入它们?
基本上,它应该自动将 4 个项目传递给 STDIN,例如“text1[ENTER]text2[ENTER]text3[ENTER]text4[ENTER]”。
是的,我可以修改我的脚本以实际读取 shell 参数,但我不想那样做,因为它应该更像一个向导。
寻找类似的东西
SOMEPROGRAM myscript arg1 arg2 arg3 arg4
Run Code Online (Sandbox Code Playgroud)
或者
SOMEPROGRAM arg1 arg2 arg3 arg4 | myscript
Run Code Online (Sandbox Code Playgroud)
或类似的东西。有这样的程序吗?
我了解您不想修改myscript
.
关于您要求的第二种解决方案,您可以使用printf
:
printf '%s\n' text1 text2 text3 text4 | myscript
Run Code Online (Sandbox Code Playgroud)
因此,将 SOMEPROGRAM 的别名定义为:
alias SOMEPROGRAM="printf '%s\n'"
Run Code Online (Sandbox Code Playgroud)
你可以有效地打电话
SOMEPROGRAM text1 text2 text3 text4 | myscript
Run Code Online (Sandbox Code Playgroud)
第一种形式是模棱两可的(从 SOMEPROGRAM 的角度来看),因为它不知道myscript
选项在哪里结束和文本参数从哪里开始,除非myscript
在没有任何选项的情况下被有效调用。在这种情况下,您可以使用一个函数:
SOMEPROGRAM() {
myscript="$1"
shift
printf '%s\n' "$@" | "$myscript"
}
Run Code Online (Sandbox Code Playgroud)
这样你就可以有效地打电话
SOMEPROGRAM myscript text1 text2 text3 text4
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
7272 次 |
最近记录: |