我写了一个小脚本,由于某种原因,我需要转义传入参数的任何空格才能使它工作。
我阅读了很多关于此问题的人的其他文章,这通常是由于没有引用$ @,但我在脚本中引用了所有变量,并且在命令行中引用了参数。此外,如果我在调试模式下运行脚本,则返回的行可以通过复制粘贴成功运行,但在脚本中执行时会失败。
CODE:
connections ()
{
args="$@"
pid="$(pgrep -nf "$args")"
echo $pid
# code that shows TCP and UDP connections for $pid
}
connections "$@"
实施例
bash test.sh "blah blah"
失败,而是返回当前正在运行的shell的pid
bash test.sh "blah\ blah"
成功并返回您正在通过pgrep搜索的进程的pid
答案 0 :(得分:1)
您的问题与"$@"
无关。
如果您向-l
添加pgrep
选项,则可以看到为什么与当前流程匹配。
您正在运行的脚本还包含您尝试在自己的参数中搜索的内容。
就像这样做,看到grep
:
$ ps -U $USER -o pid,cmd | grep gnome-terminal
12410 grep gnome-terminal
26622 gnome-terminal --geometry=180x65+135+0
反斜杠产生影响的原因是什么? pgrep
认为反斜杠+空间只是意味着空间。它找不到您的脚本,因为它包含blah\ blah
,而不是blah blah
。