首页 > 解决方案 > 无法在 Shell 脚本中保存进程的进程 ID

问题描述

我只是在 Unix 中尝试 shell 脚本。我想捕获在端口号 1337 上运行的进程的进程 ID。所以我编写了以下代码:

echo -e "Test Starts"
process_id= /bin/ps -fu $USER| grep 1337 | grep -v "grep" | awk '{print $2}'
echo $process_id

并将其保存在一个名为auto.sh

现在,当我运行以下命令时:

./auto.sh

我得到下面给出的输出:

Test Starts
9067

$process_id从来没有回声。所以我的猜测是,它没有被存储。

我查看了以下内容,但没有帮助

链接 1 链接 2

标签: linuxbashshellunix

解决方案


使用命令替换的两种方法:

  1. 反引号`command`是旧式

    echo`id -u`

  2. $()现代方式和更具可读性

    回声 $(id -u)

两者都做同样的事情,评估里面的内容,然后返回命令结果。

何时/为什么使用彼此:

  • `` 反引号

    与旧壳的兼容性

  • $()

    很难区分** ** and **'** ('``''`````'' '

    嵌套命令替换更容易

    echo $(uname && $(echo id -u))

    Linux 15444

\\echo `uname && `echo id -u`

 -bash: command substitution: line 2: syntax error: unexpected end of file

推荐阅读