我测试了我在GitHub上创建的Bash脚本的行为正确性(例如,它正确地解析了选项)。我想这样做而不必在本地克隆存储库,所以这就是我如何做到这一点:
curl -sSL https://github.com/jamesqo/gid/raw/master/gid | xargs -0 bash -c
我的问题是,如何将参数传递给相关脚本?我尝试了bash -c --help
,但由于它被解释为脚本的一部分,因此无法正常工作。
谢谢!
答案 0 :(得分:2)
通过将xargs
与Bash -c
选项一起使用,实际上使事情过于复杂。
您无需克隆存储库即可运行该脚本。只需直接下载:
curl -o gid https://raw.githubusercontent.com/jamesqo/gid/master/gid
现在它已下载为gid
,您可以将其作为Bash脚本运行,例如,
bash gid --help
您还可以使下载的脚本可执行,以便将其作为常规Unix脚本文件运行(使用其shebang,#!/bin/bash
):
chmod +x gid
./gid --help
如果您想在不将文件实际保存到文件的情况下运行脚本,可以使用Bash进程替换:
bash <(curl -sSL https://github.com/jamesqo/gid/raw/master/gid) --help
答案 1 :(得分:2)
我会回应Anthony的评论 - 下载脚本并直接执行它会更有意义,但是如果你真的开始使用bash的-c
选项,那就有点复杂了,问题是当你这样做时:
something | xargs -0 bash -c
没有机会传递任何论据。它们都被作为-c
的论据吞噬 - 它基本上变成了:
bash -c "$(something)"
所以,如果你在xargs中的-c
之后放置一些东西,它会在某些东西之前。没有机会在事情之后放任何东西,因为xargs不允许你。
如果你想传递参数,你必须使用xargs的替换位置选项,它允许你放置参数的位置,选项是-J <item>
,接下来要实现的是第一个参数将是$0
,所以你必须这样做:
something | xargs -0 -I @ bash -c @ something <arg1> <arg2>…
我可以通过以下方式模仿:
echo 'echo hi: ~$0~ ~$1~ ~$2~ ~$3~' | xargs -0 -I @ bash -c @ something one two three four
产生:
hi: ~something~ ~one~ ~two~ ~three~