如何找到正在运行的脚本的传递参数值?

Posted

技术标签:

【中文标题】如何找到正在运行的脚本的传递参数值?【英文标题】:How to find passing argument value of a running script? 【发布时间】:2020-01-06 22:36:51 【问题描述】:

我有一个 AIX 生产服务器,上面运行着一个脚本 A.sh。 我没有此服务器的 root 访问权限。 我想找出这个A.sh 脚本的参数传递值。 我怎样才能得到这个值?

/proc/processID里面有规定吗?

以下操作无效。我尝试通过生成脚本:

echo "Hello $1 $2 $3"

while [ 1 ]
do
   sleep 2
   echo $$
done

然后我运行这个脚本

test.sh 1  2 3

输出:

$ cat /proc/3107/cmdline
-bash$

根据@Cyrus 的建议,我希望

1 2 3 

这是我传入的参数,但它不是那样工作的。

【问题讨论】:

因此,我们确实鼓励人们在他们的问题中发表他们的努力,所以请务必将其添加到您的帖子中,然后让我们知道。 AIX。为什么要使用linux 标签? @***.com/users/3776858/cyrus 我想在 ubuntu 和 IBM AIX 上运行。在 ubuntu 中用于测试目的。 关闭:这就是为什么程序应该覆盖包含机密数据(密码)的参数的原因。 【参考方案1】:

你可以试试:

cat /proc/PROCESSID/cmdline

【讨论】:

我建议追加| tr '\0' ' ' 要准确获取参数,请按照@Cyrus 的说明,通过在tr 管道输出中附加| cut -d ' ' -f 3- 来排除调用程序。例如,cat /proc/$(pgrep -f test.sh)/cmdline | tr '\0' ' ' | cut -d ' ' -f 3-【参考方案2】:

这应该可行:

cat /proc/3107/cmdline | tr '\0' ' ';

您也可以使用:

ps -ef | grep script.sh | grep -v grep

其中script.sh 是您正在运行的脚本的名称。

验证步骤:

    创建一个名为 script.sh 的脚本并将以下代码粘贴到其中:

    #!/bin/bash
    while :
    do
      echo "Press [CTRL+C] to stop.."
      sleep 1
    done
    

    保存文件(来自 vi 编辑器的:wq!)。

    使其可执行

    chmod a+x script.sh
    

    通过发出如下命令行选项运行脚本:

    ./script.sh var1 val1 var2 val2 var2 val4
    

    打开另一个终端(重复会话)并发出:

    ps -ef | grep script.sh | grep -v grep 
    

你应该能看到这样的东西:

username 12227  2268  0 07:48 pts/98   00:00:00 /bin/bash ./script.sh var1 val1 var2 val2 var2 val4 var4

【讨论】:

哦,好的,这意味着您的进程没有运行。发出上述命令后,您看到退出状态 1 了吗? (您可以运行 echo $? 来检查退出代码)。我已经更新了创建脚本和测试它的步骤。你可以照着做。 @ ***.com/users/1218985/sarath-kumar-sivan 这在 ubuntu 中工作,但不了解 AIX 服务器。此解决方案是否适用于 AIX IBM?

以上是关于如何找到正在运行的脚本的传递参数值?的主要内容,如果未能解决你的问题,请参考以下文章

如何将参数从脚本传递到 html 表单值

如何将 select 语句的 IN 子句中的参数作为具有多个值的参数传递?

如何找到传递给 Bash 脚本的参数数量?

如何调用 shell 脚本并从另一个 shell 脚本传递参数

参数传递:shell脚本调用一个带参数的python函数

从 python 运行 MATLAB 脚本 + 传递参数