You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

nohup调用带参Shell脚本方法参数未生效的正确传参方式

问题根因

参数无法被start方法获取和nohup语法无关,核心问题是/bin/scripts/first.ksh仅定义了start()函数,脚本主体没有任何调用该函数的逻辑。执行脚本时传入的start、arg1是脚本级别的位置参数,不会自动传入内部定义的函数,因此函数拿不到传入的值。

修正方案

按需选下面两种方案就行:

方案1:修改first.ksh增加函数调度逻辑(推荐)

在first.ksh末尾加参数调度语句,把脚本接收到的位置参数透传给对应函数,修正后的/bin/scripts/first.ksh内容如下:

#!/bin/bash
start(){
   first="$1";
   echo "arg is $first"
}

# 取第一个参数作为要执行的函数名,剩余参数透传给目标函数
"$@"

这时候second.sh里的nohup调用语句不用改,原来的写法就能正常传参:

#!/bin/bash
nohup sh /bin/scripts/first.ksh start arg1 > nohup_log 2>&1 &

执行后nohup_log文件里会正常输出arg is arg1。

方案2:不修改first.ksh,调整nohup调用逻辑

如果不能改first.ksh的原有内容,就在nohup调用时先加载first.ksh的函数定义,再主动调用start函数传参,修正后的/bin/scripts/second.sh内容如下:

#!/bin/bash
nohup sh -c '. /bin/scripts/first.ksh; start arg1' > nohup_log 2>&1 &

这种写法会在nohup启动的子shell里先加载first.ksh的所有函数定义,再直接执行start函数并传入arg1参数,不用改原first.ksh代码就能正常传参。

内容的提问来源于stack exchange,提问作者nongjai

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.29 01:54:33