Bash:变量包含可执行路径 - >转换为字符串

时间:2018-01-04 10:06:07

标签: string bash variables cut esxi

我遇到了这个问题而没有找到足够的解决方案,也许你们可以帮助我。

我需要这样做:

find -name some.log

它将给予很多回击。所以现在我想通过" for"像这样:

    for a in $(find -name vmware.log)
    do
      XXXXXXX
    done

之后,我想在变量$ a中剪切路径。让我们假设,$ a具有以下内容:

./this/is/a/path/some.log

我会用

剪切这个变量
cut -d/ -f2 $a

完成的代码如下:

for a in $(find -name vmware.log)
do
  cutpath=cut -d/ -f2 $a
done

当我这样做时,bash使用$ a的内容作为系统路径而不是字符串。所以" cut"尝试直接访问该文件,但它应该只切断$ a中的字符串路径。我在VMware ESXi上遇到的错误是:

-sh: ./this/is/a/path/some.log: Device or resource busy

我做错了什么?有人可以帮帮我吗?

2 个答案:

答案 0 :(得分:0)

首先,不鼓励使用find循环for的输出,因为它不适用于包含空格或glob元字符的文件名(例如*)。

使用-exec开关实现您的目标。文件{}的名称将作为$0传递给脚本。

find -name 'vmware.log' -exec sh -c 'echo "$0" | cut -d/ -f2' {} \;
# or with bash
find -name 'vmware.log' -exec bash -c 'cut -d/ -f2 <<<"$0"' {} \;

看起来你想在文件名而不是文件的内容上使用cut,所以你需要传递名称来剪切标准输入,而不是作为参数。这可以使用管道|或使用Bash的<<< herestring语法来完成。

答案 1 :(得分:-2)

你应该尝试使用这样的东西:

#!/bin/bash

VAR1="$1"
VAR2="$2"

MOREF='sudo run command against $VAR1 | grep name | cut -c7-'

echo $MOREF

使用tickquotes将执行命令并将其存储在变量中。