脚本帮助允许用户交互根据ps

时间:2016-04-20 21:58:10

标签: bash

我正在尝试这一点,但做得不好而且我被困住了。我有一个限制sudo的用户只能运行某些命令。它们有时会运行多个命令,并且需要能够杀死某些命令/进程。命令是tcpdump,当它生成为sudo时,它会创建2个进程。再次运行,总数为4.每个2绑定到每个tcpdump实例,所以我让我的脚本找到PPID,我将杀死它来处理子进程。以下是我到目前为止的情况:

#!/bin/bash 

RESULT1=$(ps -ef | grep "sudo tcpdump" | grep -v grep)
RESULT2=$(ps -ef | grep "sudo tcpdump" | grep -v grep | awk '{print   $3}')
echo $RESULT1
echo $RESULT2
if [ "$RESULT2" = "$RESULT2" ]
then
echo "Choose which PPID you wish to kill"
fi

到目前为止输出如下:

root 14485 14456 0 16:01 pts/0 00:00:00 sudo tcpdump -n -i any port   53 
root 14743 14720 0 16:09 pts/2 00:00:00 sudo tcpdump -n -i any port    220
14456 14720
Choose which PPID you wish to kill

我的想法

if [ "$RESULT2" = "$RESULT2" ]

以某种方式告诉剧本他们只被允许杀死它找到的PPID。 (因为他们不能自由地杀死任何东西)但我现在想,这不是实现这一目标的方法。

我正在绘制关于如何告诉脚本突破$ RESULT2的空白,以便我可以为用户提供选项。那么,任何人都可以帮助我继续前进,这样用户现在可以在找到的PPID之间进行选择并让脚本只允许它们杀死那些?

2 个答案:

答案 0 :(得分:1)

这将始终评估为true:

read input
sudo kill `echo "$RESULT2" |
    awk -v input="$input" 'input==$1'` ||
    echo "Invalid PID"

所以这不是一个有用的测试。相反,您可以验证用户输入以确保它等于RESULT2中的一行:

{{1}}

答案 1 :(得分:1)

HttpContext.Current.User.Identity.Name