【问题标题】:command works in terminal and not in script命令在终端而不是脚本中工作
【发布时间】:2015-01-29 10:43:47
【问题描述】:

以下命令在终端中运行并打印值 1

count_XXX=`ll -d /usr/Systems/XXX* 2> /dev/null | grep ^d | wc -l`
echo "$count_XXX"

/usr/Systems目录下有一个目录和两个软链接,同名XXX*。

当我在 shell 脚本中保留相同的两行时。它打印值 0

这在 unix(终端和脚本)中运行良好,但是当我尝试在 linux 服务器中运行时,问题发生了(在脚本中)。

我需要为 Linux 做些改变吗?

提前致谢。

【问题讨论】:

  • ll 不是命令,它是别名,因此您可能应该使用ls。可能是您的 linux 系统上不存在别名
  • @arco444 它适用于终端。所以我看到别名有效
  • 没关系,强烈建议不要使用。在各种情况下可能无法加载别名。直接使用命令更安全。在这种情况下可能是ls -alFd
  • 是的.. 谢谢它的工作。由于“2> /dev/null”,我看不到错误消息。找不到了

标签: linux bash shell


【解决方案1】:

使用ll 然后grep 然后wc 对目录计数来说有点过多,而且由于目录名称中可能存在空格/换行符,这也容易出错。

在 BASH 中使用这个简单的 sn-p:

shopt -s nullglob
arr=( /usr/Systems/XXX*/ )
echo ${#arr[@]}
2
  • / 在 glob 模式的末尾确保它只匹配目录。
  • shopt -s nullglob 确保在 glob 模式与任何内容都不匹配时不打印模式

【讨论】:

  • 如果不存在也返回 1..?如何将值放入变量中。
  • 要存储在变量中,只需使用:count=${#arr[@]} 以上
  • 我正在检查它。谢谢
猜你喜欢
  • 1970-01-01
  • 2022-01-02
  • 2016-09-15
  • 1970-01-01
  • 2012-05-28
  • 2021-01-17
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多