【发布时间】:2021-12-28 23:28:55
【问题描述】:
我正在与杂乱无章的系统作斗争,该系统的大部分功能都使用大量 bash 脚本,我们发现了一个需要解决的错误。
我想我可以通过更改设置为 A 的变量 VAR1 来使其工作,具体取决于加载文件的位置,但为了做到这一点,我需要让系统知道何时确定进程打开了一个子目录中的文件,然后更改了变量,因为它只有两种加载这些文件的方法,从目录/var/system/folder/file.ext 或从子目录/var/system/folder/subfolder/file.ext。
所以我的假设是,无论如何,只要做类似 ....
if [ ps -aux | grep /var/system/folder/*/*.*]; then
VAR1=B
例如,或类似的东西,这将使它在每次打开该子文件夹中的文件时显示带有命令行参数的路径名的输出,从而使其更改变量。但是......由于某种原因, grep 似乎不适用于通配符,我已经尝试了一段时间,但我无法弄清楚如何使其工作。非常感谢您的帮助。
【问题讨论】:
-
Grep 不使用通配符 - 它使用正则表达式。 grep 正则表达式中的星号表示前一个字符的零个或多个,前一个字符是斜杠,所以这不是您想要的。
ps -aux | grep "/var/system/folder/[^/]*/"呢,它会查找/var/system/folder/后跟一些以斜杠结尾的非斜杠字符。仅当存在子目录时才会匹配。您需要双引号,因为方括号对 bash 具有特殊含义。 -
您是否偶然使用了 Linux?
-
@Shawn 是的,我使用的是 Linux。 @JerryJeremiah 几乎在那里,现在当我从
/var/system/folder/file.ext加载文件时它显示user 1438 0.0 0.0 10664 920 pts/0 S+ 12:05 0:00 grep --color=auto /var/system/folder/[^/]*/,这意味着 t 将不起作用,因为如果它有输出,它将改变变量
标签: string bash grep subdirectory script