linux - 无法在 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
从来没有回声。所以我的猜测是,它没有被存储。
我查看了以下内容,但没有帮助
解决方案
使用命令替换的两种方法:
反引号`command`是旧式
echo
`id -u`$()
现代方式和更具可读性回声 $(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
推荐阅读
- r - 我如何在 R 中运行多元回归,同时每次添加 100 行
- c++ - ClassName has not been declared 编译器错误,使用一次 pragma 后具有继承的循环依赖
- r - 如何替换R中字符串中的多个字符?
- reporting-services - 组列的聚合以及表中的组
- c - 当我使用合并排序时,为什么在我的 void** 数组中添加了一个额外的元素?
- java - 适配器有问题....数据未从数据快照显示。我该如何解决?
- python-3.x - 专注于字段的屏幕键盘上的 Python Kivy
- css - 风格 Joomla!带有 Bootstrap 4.3 的模板,将引导样式添加到自定义样式
- user-interface - 如何在电子中获取操作系统窗口位置?
- flutter - Flutter \n\n 除非硬编码字符串,否则不会换行