Shell脚本将参数传递给另一个Shell脚本

时间:2018-07-27 17:23:53

标签: python bash shell

我正在编写一个shell脚本,该脚本调用另一个调用python脚本的shell脚本,并像这样在整个链中传递参数:

目录结构:

first
scripts
  |- second
  |- third

第一

#!/usr/bin/env bash

date=$1
p=$2

(cd ./scripts/ && ./second "$p")

#!/usr/bin/env bash

function myFunction() {
    ./third $1
}
myFunction

第三

#!/usr/bin/env python
import sys

p = sys.argv[1]
print("I got " + p)

我知道那是一团糟,但是我现在需要这种方式来工作。

当我尝试./first 20180716 0.5

我希望这段代码显示“我有0.5”,但是python脚本似乎抱怨:

Traceback (most recent call last):
  File "./third", line 4, in <module>
    p = sys.argv[1]
IndexError: list index out of range

这意味着似乎没有任何内容传递给./third。有什么想法吗?

1 个答案:

答案 0 :(得分:1)

作为尝试的复制者(使用MCVE编辑问题后,该复制者将被删除):

killall

...正确发出# create a temporary directory tempdir=$(mktemp -d "${TMPDIR:-/tmp}/repro.XXXXXX") || exit # create our "first" script cat >"$tempdir/first" <<'EOF' #!/usr/bin/env bash date=$1 p=$2 (cd ./scripts/ && ./second "$p") EOF # create a "scripts" directory mkdir "$tempdir/scripts" || exit # create our "second" script cat >"$tempdir/scripts/second" <<'EOF' #!/usr/bin/env bash ./third $1 EOF # create our "third" script cat >"$tempdir/scripts/third" <<'EOF' #!/usr/bin/env python import sys p = sys.argv[1] print("I got " + p) EOF chmod +x "$tempdir"/{first,scripts/{second,third}} # make the scripts all executable... cd "$tempdir" && ./first 20180716 0.5 # and actually run the first one