我有两个脚本,假设它们是 s1.sh 和 s2.sh。
在s1中,代码是
step = 0
.
.(omitted)
.
if [ $step -eq 19 ]; then
./s2.sh
在s2中,代码是
step=0
.
. (many codes here, but omitted)
.
if [ $step -eq 18 ]; then
print "hello"
我想从第19步开始运行s1,然后由于s1会调用s2,所以我希望s2也可以直接进入第19步。
以前听人讲过这个,但具体方法我实在记不清了。我认为执行此操作的命令代码如下:
./s1.sh --step 19 [some code?]--step 18
知道如何编写可以将参数传递给上面的两个脚本的命令行吗?
答案1
如果您希望step
两者相同,请export step
在 s1 中运行。一旦你这样做了,step
变量就会出现在 s2 中,而不必在调用它时显式传递。
如果您想step
在 s2 中设置与 s1 不同的值,请添加step=whatever
到对 s2 的调用之前。例如,要使其在 s2 中为 8,您可以这样做:step=8 ./s2.sh
。
答案2
实现此结果的一种方法是使用位置参数:
这是 test1.sh 脚本:
#!/bin/bash
step=$1
step2=$2
if [[ step -eq 19 ]]; then
./test2.sh $step2
fi
和 test2.sh 脚本:
#!/bin/bash
step=$1
if [[ step -eq 18 ]]; then
echo "success - step 18 executed"
fi
然后你可以像这样调用 test1.sh (在你的例子中是 s1.sh ):
./test1.sh 19 18
之后您应该会收到成功消息。尽管这确实需要对原始脚本进行一些编辑,但它确实提供了很大的灵活性,并使扩展两个脚本变得更加简单。如果您决定使用此方法,我强烈建议为步骤和步骤 2 变量建立默认值。