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

String Bash:变量包含可执行路径->;转换为字符串,string,bash,variables,cut,esxi,String,Bash,Variables,Cut,Esxi,我有这个问题,还没有找到一个足够的解决方案,也许你们可以帮我 我需要这样做: find -name some.log 它会给你很多回击。现在我想用这样的“for”来解释一下: for a in $(find -name vmware.log) do XXXXXXX done for a in $(find -name vmware.log) do cutpath=cut -d/ -f2 $a done 在那之后,我想在变量$a中切割路径。假设$a具有

我有这个问题,还没有找到一个足够的解决方案,也许你们可以帮我

我需要这样做:

find -name some.log
它会给你很多回击。现在我想用这样的“for”来解释一下:

    for a in $(find -name vmware.log)
    do
      XXXXXXX
    done
for a in $(find -name vmware.log)
do
  cutpath=cut -d/ -f2 $a
done
在那之后,我想在变量$a中切割路径。假设$a具有以下内容:

./this/is/a/path/some.log
我将使用

cut -d/ -f2 $a
完成的代码如下所示:

    for a in $(find -name vmware.log)
    do
      XXXXXXX
    done
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

我做错了什么?有人能帮我吗?

你应该试着用这样的方法:

#!/bin/bash

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

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

echo $MOREF

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

首先,不鼓励使用
for
循环通过
find
的输出,因为它不适用于包含空格或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"' {} \;
find-name'vmware.log'-exec sh-c'echo“$0”| cut-d/-f2'{}\;
#还是用bash

查找-name'vmware.log'-execbash-c'cut-d/-f2嘿,感谢您的快速回答。我试图玩弄你的解决方案,但运气不好。你能解释一下吗?我建议使用
MOREF=$(…)
。这个答案中的代码是不正确的,似乎是直接从互联网上复制的。我试过了:),但运气不好。这里的输出:“find:-exec需要一个参数”这是我执行的:“find-name'vmware.log'-exec bash-c'echo”$0“| cut-d/-f2'{}\”@Sperk,而不是将输出粘贴到注释中,请更新您的问题,向我们展示一些与
find
和所需输出相匹配的示例路径。@Sperk如果没有包含
\,您就没有正确复制语法在最后。对不起,是我的错。我确实抄错了。它就像一个符咒。非常感谢:)