Ton*_*ark 4 bash process shell-script arguments
我运行以下命令。
ps -e -o args | grep destiny | grep UNIX
Run Code Online (Sandbox Code Playgroud)
我收到以下输出。
/path/to/destiny -r -m UNIX -t TCP -p 1501
Run Code Online (Sandbox Code Playgroud)
我可以使用什么命令来获取打印参数的值(例如-mor-t或-p)?我想实现以下目标。
ps -e -o args | grep destiny | grep UNIX | <someCommand> -p 这应该打印 1501
ps -e -o args | grep destiny | grep UNIX | <someCommand> -m 这应该打印 UNIX
ps -e -o args | grep destiny | grep UNIX | <someCommand> -t 这应该打印 TCP
请注意-p,-m或-t可能会切换列,因此awk不能选择按数字列打印和选择列。
更多的事实使解析变得更容易(我知道我可能只是缺乏工具知识)。
这通常是不可能的,因为只有命令本身知道如何解析自己的参数。以你的例子为例:
/path/to/destiny -r -m UNIX -t TCP -p 1501
Run Code Online (Sandbox Code Playgroud)
-p可能是一个不带参数的选项(如布尔值:它启用或禁用某些行为)在这种情况下1501将是一个位置参数(如文件名或其他东西)。或者-p可以是一个带有参数的选项,它的参数是1501. 没有办法知道它是哪个!
参数向量只是零个或多个字符串的列表。这些字符串没有任何意义,表明哪些是选项,哪些是这些选项的参数,哪些是非选项参数。
即使-r您的示例中的选项也无法确定地进行一般解析。鉴于-r紧随其后的是另一个以 开头的字符串,-很有可能这-r是一个不带参数的选项(例如启用或禁用某些行为的布尔值),但实际上这不是 100% 确定的。-r可能是一个带有参数的选项,并且-m将是它的参数。或者该命令可能根本不遵循正常的 UNIX 约定,-r根本不是一个选项!