试图逃跑:
function which_terminal {
return (ps -p$PPID | awk "'NR==2'" | cut -d "' '" -f 11)
}在.zshrc内部,可以获得运行终端模拟器的变量,这样我就可以为不同的终端模拟器配置不同的主题。
当我在命令行中运行这个逗号时,我得到了所使用的模拟器。但是,当我试图将它添加到文件中时,会得到一个错误,如下所示:
which_terminal:1: no matches found: (ps -p16632 | awk 'NR==2' | cut -d ' ' -f 11)找不到哪里不对,如果有人能帮上忙
发布于 2018-06-19 19:05:50
在shell中,函数的返回值与命令的退出状态类似:只能返回一个小整数值,指示成功(0)或失败代码(> 0)。
此状态与命令的输出无关。若要运行命令并将其输出存储到变量中,请使用命令替换。要在函数中运行命令并将其输出作为函数的输出,只需运行命令即可。
function which_terminal {
ps -p$PPID | awk "'NR==2'" | cut -d "' '" -f 11
}请注意,解析ps的输出是不可靠的和过度的。(另外,您弄错了:您正在将'NR==2'解析为awk,将' '解析为cut,这两个参数都是无效的;您需要围绕这两个参数进行单引号或双引号,而不是两者兼而有之。)ps命令具有打印任意字段的选项,例如,comm用于可执行文件的名称(在Linux下截断为16个字符),或用于带参数的完整命令行的args (有时还包括命令的完整路径,具体取决于调用方式)。
function which_terminal {
ps -p$PPID -o comm=
}或者,将输出存储到变量中:
parent_process_command=$(ps -p$PPID -o comm=)出现错误的原因是zsh试图将return后面的内容解析为命令的参数(这里是return关键字的参数,但解析方式相同)。它看到一个开括号,并决定它是通配符表达式的开始。这个通配符表达式将匹配一个名为ps -p16632、awk 'NR==2'或cut -d -f 11的文件(其中包含不呈现在这里的前导/尾随空格),但由于您(毫不奇怪)没有任何这些名称的文件,zsh抱怨没有找到匹配的文件。如果您碰巧在当前目录中有一个名为3的文件,而没有其他只有一个字符名的文件,那么return ?将返回3。
https://unix.stackexchange.com/questions/450705
复制相似问题