我试图获取执行脚本的shell的名称.
为什么
echo $(ps | grep $PPID) | cut -d" " -f4
Run Code Online (Sandbox Code Playgroud)
工作的同时
echo ps | grep $PPID | cut -d" " -f4
Run Code Online (Sandbox Code Playgroud)
才不是?
rua*_*akh 20
原因是
echo ps
Run Code Online (Sandbox Code Playgroud)
只打印出字符串ps
; 它不运行程序ps
.您的命令的更正版本将是:
ps | grep $PPID | cut -d" " -f4
Run Code Online (Sandbox Code Playgroud)
编辑添加: paxdiablo指出ps | grep $PPID
包括很多将被折叠的空格echo $(ps | grep $PPID)
(因为$(...)
当它不是双引号时,由空格分成单独的参数,然后echo
输出由空格分隔的所有参数).要解决这个问题,您可以使用tr
"挤压"重复的空格:
ps | grep $PPID | tr -s ' ' | cut -d' ' -f5
Run Code Online (Sandbox Code Playgroud)
或者你可以坚持你必须开始的东西.:-)
第一行:
echo $(ps | grep $PPID) | cut -d" " -f4
Run Code Online (Sandbox Code Playgroud)
说:
ps | grep $PPID
在子shell中执行返回输出 - 这将是这样的:
3559 pts/1 00:00:00 bash
Run Code Online (Sandbox Code Playgroud)
然后使用该输出作为echo的第一个参数 - 实际上,这意味着只回显输出
cut -d" " -f4
- 在这种情况下,它为您提供命令名称第二个命令:
echo ps | grep $PPID | cut -d" " -f4
Run Code Online (Sandbox Code Playgroud)
说:
ps
$PPID
- 这将永远不会返回任何东西,因为它$PPID
包含一个数字,所以它永远不会ps
.因此,grep什么都不返回cut -d" " -f4
上一个命令的输入 - 这没什么,所以你什么也得不到 归档时间: |
|
查看次数: |
29333 次 |
最近记录: |