【问题标题】:How to work around tr and cut not being available?如何解决 tr 和 cut 不可用?
【发布时间】:2014-11-03 15:46:50
【问题描述】:

我没有可用的trcut。这个(摘录)在 Linux 服务器上与他们一起工作:

disk_avail=$(df -k /var/tmp | tail -1 | tr -s ' ' | cut -d' ' -f4)  
pids=$(cat /var/tmp/$0.pid | tr -s ' ' | cut -d ' ' -f 2)  
while [ $count -le 4 ]  

..但是当我尝试在设备上实现它们时,它说:

tr: not found
cut: not found
tr: not found
cut: not found
[: -lt: unexpected operator

谁能帮我解决这个问题?
我刚刚检查过,sed 和 awk 可用。
该设备是运行 JunOS 的瞻博网络路由器。
按要求输出:

% ls /bin/cut
ls: /bin/cut: 没有那个文件或目录
% ls /usr/bin/cut
ls: /usr/bin/cut: 没有那个文件或目录
%

感谢您提供以下 awk 建议,我会尽快尝试。

awk 解决方案有效,谢谢!

【问题讨论】:

  • 您有sedawk 可用吗?
  • 设备是什么?它是运行带有像 Busybox 这样的 shell 的嵌入式 Linux,还是运行真正的 Bash?
  • 你有 awk/sed 吗?只需键入它们,看看您是否获得帮助和显示选项?同时粘贴 ls /bin/cut 的输出; ls /usr/bin/cut 我确定 PATH 变量会有问题
  • 什么可用的?
  • [: -lt: unexpected operator 可能是因为$count 是空的,因为之前的错误。引用这个论点可以避免:while [ "$count" -le 4 ]

标签: bash cut tr


【解决方案1】:

awk是正常可用的,所以假设你的机器里有它,这种方法可以帮你解决问题:

df -k /var/tmp | tail -1 | tr -s ' ' | cut -d' ' -f4

这意味着您想从df -k 的最后一行获取第 4 个字段。

这是等价的:

disk_avail=$(df -k /var/tmp | awk 'END {print $4}')

我们正在利用awk 在处理END 块时能够访问最后一行。这样,您可以打印最后的第 4 个字段。另外,tr -s' 'cut 也不需要合并,因为awk 确实将多个空格作为一个处理。


关于这个:

pids=$(cat /var/tmp/$0.pid | tr -s ' ' | cut -d ' ' -f 2)  

这会从/var/tmp/$0.pid 获取第二个字段。同样,你可以使用这个 awk:

pids=$(awk '{print $2}' /var/tmp/$0.pid)

关于while [ $count -le 4 ]的问题,考虑Keith Thompson comments的问题:

[: -lt: unexpected operator 可能是因为$count 是 由于较早的错误而为空。引用论点将避免 那:while [ "$count" -le 4 ]

【讨论】:

    【解决方案2】:

    我希望你至少有一个合适的外壳。

    您可以(有利地)将外部实用程序tailtrcut 等替换为 shell 内置函数。我们假设(至少)一个 POSIX shell。

    • 第一行:

      disk_avail=$(df -k /var/tmp | { read -r _; read -r _ _ _ d _; echo "$d"; })
      

      这一行假设df -k /var/tmp 输出两行(一行用于标题,一行用于内容),并且您的tail -1 实际上想要第二行。这很可能适用于您的情况。

    • 对于第二行:

      pids=$(while read -r _ p _; do echo "$p"; done < /var/tmp/$0.pid)
      
    • 对于最后一行,正如@Keith Thompson 在您的 OP 中评论的那样,这可能是由于缺少引号。使用:

      while [ "$count" -le 4 ];
      

      在这种情况下,至少你会得到一个不同的错误——可能类似于[: Illegal number:

    您标记了您的问题 Bash。如果你真的安装了 Bash,这些命令可以写成更好的风格。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-07-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-02-20
      • 2023-02-15
      • 2019-12-08
      • 1970-01-01
      相关资源
      最近更新 更多