如何通过参数将答案传递给 CLI 脚本?

mpe*_*pen 4 command-line

我正在编写一个 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)

或类似的东西。有这样的程序吗?

enz*_*tib 6

我了解您不想修改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)