我正在编写一个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。有什么想法吗?
答案 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
。