shell命令中的问题

发布于 2024-08-07 15:11:26 字数 529 浏览 2 评论 0原文

我正在命令行上尝试以下命令,

ps -u `id | cut -f2 -d"=" | cut -f1 -d"("`  -f | grep ppLSN | awk '{print $9}' | awk '{FS="=";print $2}' | grep KLMN | wc -l

该命令的值返回为 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 有人能告诉我为什么这不起作用吗?

i am trying the following command on the command line

ps -u `id | cut -f2 -d"=" | cut -f1 -d"("`  -f | grep ppLSN | awk '{print $9}' | awk '{FS="=";print $2}' | grep KLMN | wc -l

the value of teh command is returned as 7.

but when i am putting the same command inside a script abc_sh like below

ps -u `id | cut -f2 -d"=" | cut -f1 -d"("`  -f | grep ppLSN | awk '{print $9}' | awk '{FS="=";print $2}' | grep $XYZ | wc -l

and i am calling the script on the command line as abc_sh XYZ=KLMN and it does not work and returns 0
the problem is with the grep in the command grep $XYZ
could anybody please tell why this is not working?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

美男兮 2024-08-14 15:11:26

因为您的 $1 变量(脚本的第一个参数)设置为 XYZ=KLMN。

只需使用 abc_sh KLMNgrep $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:~$

,它起作用的地方可能在启动脚本之一中有 set -k (bashrc 或配置文件。)

Because your $1 variable (first argument to the script) is set to XYZ=KLMN.

Just use abc_sh KLMN and grep $1 instead of grep $XYZ.

(Assuming we are talking about bash here)

The other alternative is defining a temporary environment variable in which case you would have to call it like this: XYZ=KLMN abc_sh

EDIT:

Found what you were using, you have to use set -k (see SHELL BUILTIN COMMANDS in the BASH manual)

          -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.

So

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:~$

So, the place where this was working probably has set -k in one of the startup scripts (bashrc or profile.)

吃颗糖壮壮胆 2024-08-14 15:11:26

尝试以下任何一种方法来设置临时环境变量:

XYZ=KLMN abc_sh
env XYZ=KLMN abc_sh
(export XYZ=KLMN; abc_sh)

Try any of these to set a temporary environment variable:

XYZ=KLMN abc_sh
env XYZ=KLMN abc_sh
(export XYZ=KLMN; abc_sh)
故人如初 2024-08-14 15:11:26

你正在使用如此多的命令链接在一起......

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}'

you are using so many commands chained together....

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}'
々眼睛长脚气 2024-08-14 15:11:26

调用这个脚本:

#!/bin/ksh
ps -u $(id -u) -o args | grep $XYZ | cut -f2- -d " "

像这样:

XYZ=KLMN abc_sh

Call this script:

#!/bin/ksh
ps -u $(id -u) -o args | grep $XYZ | cut -f2- -d " "

Like this:

XYZ=KLMN abc_sh
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文