【问题标题】:Call a shell script method with parameter using nohup使用 nohup 调用带参数的 shell 脚本方法
【发布时间】:2022-10-20 13:09:16
【问题描述】:

/bin/scripts/first.ksh

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

/bin/scripts/second.sh

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

争论没有被采纳。 在第二个脚本中传递参数的正确方法是什么?

【问题讨论】:

  • 您正在运行脚本first.ksh 使用带有两个参数的 sh (不是 bash ...。您的代码中不涉及 bash)。您发布的脚本只定义了一个函数,但没有获取它的任何参数,也从不调用该函数。
  • 我被标题弄糊涂了。你的意思是 ”调用带参数的 shell 脚本方法利用没有?"

标签: shell nohup


【解决方案1】:

如果你传递参数,你必须以某种方式使用它们。一种可能性是在技术上确实将您的脚本编写为

start(){
 first="$1";
 echo "arg is $first"
}

"$@"

最后一行将 - 在您的情况下 - 扩展为 start arg1 并因此调用您的函数。然而这样做是有风险的:因为脚本的第一个参数(即开始) 被视为要执行的命令,脚本的用户可以通过参数注入任何代码。这是一个严重的安全漏洞。

我至少会以某种方式验证第一个参数,或者完全重新设计你的脚本。例如,如果脚本除了调用这个函数之外没有做任何其他事情,那么你为什么要定义一个函数就不清楚了。

【讨论】:

    猜你喜欢
    • 2013-08-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-21
    • 2013-09-01
    • 2018-11-18
    • 2018-12-27
    • 2013-08-16
    相关资源
    最近更新 更多