通过管道传递脚本的脚本

Pet*_*Mmm 24 bash

我有这个示例shell脚本:

echo /$1/
Run Code Online (Sandbox Code Playgroud)

所以我可以打电话

$ . ./script 5
# output: /5/
Run Code Online (Sandbox Code Playgroud)

我想将脚本输入sh(ell),但是我也可以通过arg吗?

cat script | sh 
# output: //
Run Code Online (Sandbox Code Playgroud)

Ant*_*nko 36

您可以使用以下-s选项将参数传递给shell :

cat script | bash -s 5
Run Code Online (Sandbox Code Playgroud)

  • 这对我有用:`猫脚本| bash -s - -i` (12认同)
  • 如果我想将"-i"传递给我的程序,那么cat script | bash -s -i不起作用!! -i由bash解释!怎么样?我尝试逃避但没有. (3认同)
  • 或者最好是`bash -s 5 <script`,如果`bash`真的只需要从文件中读取脚本(而不是更复杂的管道). (2认同)
  • 不适用于“-p”,例如(从破折号开始)“cat script |” bash -s -a -b -c`参见答案http://stackoverflow.com/a/25563308/983232 (2认同)

nor*_*ree 24

bash -s -- <args>

例如,安装谷歌云 SDK

~ curl https://sdk.cloud.google.com | bash -s -- --disable-prompts


Wyc*_*yck 17

cat script | sh -s -- 5
Run Code Online (Sandbox Code Playgroud)

-s参数告诉sh我们从标准输入获取命令,而不需要文件名作为位置参数。(否则,如果没有-s,下一个非标志参数将被视为文件名。)

告诉--sh 停止处理进一步的参数,以便脚本仅拾取它们(而不是应用于sh自身)。当您需要向脚本传递一个以-或开头--(例如:--dry-run)且必须被 忽略的标志时,这非常有用sh。另请注意,单个-相当于--

cat script | sh -s - --dry-run
Run Code Online (Sandbox Code Playgroud)