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