我在命令行上尝试以下命令
ps -u `id | cut -f2 -d"=" | cut -f1 -d"("` -f | grep ppLSN | awk '{print $9}' | awk '{FS="=";print $2}' | grep KLMN | wc -l
teh命令的值返回为7
。
但是当我将相同的命令放在脚本abc_sh中时,如下所示
ps -u `id | cut -f2 -d"=" | cut -f1 -d"("` -f | grep ppLSN | awk '{print $9}' | awk '{FS="=";print $2}' | grep $XYZ | wc -l
我在命令行上调用脚本为abc_sh XYZ=KLMN
但它不起作用并返回0
问题出在命令grep $XYZ
中的grep
任何人都可以告诉为什么这不起作用?
答案 0 :(得分:3)
因为$ 1变量(脚本的第一个参数)设置为XYZ = KLMN。
只需使用abc_sh KLMN
和grep $1
代替grep $XYZ
。
(假设我们在这里谈论bash)
另一种选择是定义临时环境变量,在这种情况下你必须像这样调用它:XYZ=KLMN abc_sh
编辑:
找到您正在使用的内容,您必须使用set -k
(请参阅BASH手册中的SHELL BUILTIN COMMANDS)
-k All arguments in the form of assignment statements are
placed in the environment for a command, not just those
that precede the command name.
所以
vinko@parrot:~$ more abc
#!/bin/bash
echo $XYZ
vinko@parrot:~$ set -k
vinko@parrot:~$ ./abc XYZ=KLMN
KLMN
vinko@parrot:~$ set +k
vinko@parrot:~$ ./abc XYZ=KLMN
vinko@parrot:~$
因此,这个工作的地方可能在其中一个启动脚本(bashrc或profile。)中有set -k
。
答案 1 :(得分:2)
尝试其中任何一个来设置临时环境变量:
XYZ=KLMN abc_sh
env XYZ=KLMN abc_sh
(export XYZ=KLMN; abc_sh)
答案 2 :(得分:1)
你正在使用如此多的链接在一起的命令......
ps -u `id -u` -f | awk -v x="$XYZ" -v p="ppLSN" '$0~p{
m=split($9,a,"=")
if(a[2]~x){count++}
}
END{print count}'
答案 3 :(得分:0)
调用此脚本:
#!/bin/ksh
ps -u $(id -u) -o args | grep $XYZ | cut -f2- -d " "
像这样:
XYZ=KLMN abc_sh