如何找到正在运行的脚本的传递参数值?
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?以上是关于如何找到正在运行的脚本的传递参数值?的主要内容,如果未能解决你的问题,请参考以下文章
如何将 select 语句的 IN 子句中的参数作为具有多个值的参数传递?