尝试将目录名称传递给函数时出现“是目录”错误

用户名

在我的bash脚本中,我使用find通过通配符获取文件夹名称:

for i in $(find ${directory} -mindepth 1 -type d -name ${wildcard});
do
  stuff=doStuff ${i}
done

doStuff() {
  echo ${1}
  return ${1}'/hello';
}

问题是当我这样做时,出现以下错误(可以说$ {i}对应于“ home / me / my_directory”):

line 111: '/home/me/my_directory': is a directory. 

(第111行是带有'doStuff'的行)

我尝试这样做,无济于事:

for i in $(find ${directory} -mindepth 1 -type d -name ${wildcard});
do
  stuff=doStuff "${i}"
done

显然是因为程序正在尝试执行目录,但是我只希望它作为我可以操纵的字符串。

震荡器

引号和命令替换是您在这里遇到的问题。

您遇到的特定问题是因为s​​hell试图运行/home/me/my_directory使用环境变量调用的命令stuff=doStuff
您真正想要的(如果我没有正确解释的话)是doStuff将value$i作为参数运行,并将输出分配给变量stuff这样做的方法是将命令包装在中$()例如:

stuff="$(doStuff "$i")"

请注意,我还对所有内容都加了引号。这是为了防止shell对您不希望进行单词拆分的内容进行单词拆分(它将将单个参数/foo/bar baz变为/foo/barbaz)。

函数的输出也将用作返回值,而不是return

当您应该使用更多的引号时,还应该将其添加到其他所有引号中。这是脚本的完整版本:

doStuff() {
  echo "${1}" >&2
  printf '%s/hello' "$1";
}

IFS=$'\n'
for i in $(find "${directory}" -mindepth 1 -type d -name "${wildcard}");
do
  stuff="$(doStuff "${i}")"
done

在尝试使用函数定义之前,必须先放置它。Shell无法像编译程序一样进行解析,它会多次遍历文件。它是自上而下的。
我还进行了修改doStuff,将其发送echo到STDERR,然后将其显示在终端上,然后将其printf发送到STDOUT,将其捕获到变量中stuff

请注意,如果您的任何目录包含换行符,这仍然会有问题。但是,这是外壳的限制。文件路径不能包含的唯一字符是NULL char(\0)。但是bash和其他shell无法在字符串中存储NULL字符(不是全部,但很多。我知道zsh可以),因此不能将其用作定界符。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

将目录名称传递给Ruby run语句

尝试将参数传递给方法时出现“调用隐式删除的副本构造函数”错误

尝试删除多个目录时出现错误

将数组传递给函数时出现分段错误

将变量传递给函数时出现500错误

将指针传递给函数时出现分段错误

将整数指针传递给函数时出现分段错误

将指针传递给函数时出现分段错误

在循环中创建目录时捕获目录名称

当我打开 Gnome ALSA Mixer 时,我收到了错误的密钥或目录名称错误

我正在尝试使用双指针将字符串传递给函数,但出现错误

如何通过将目录名称作为参数传递来递归创建输出文件?

Swift:尝试将元组传递给回调函数时出现“歧义表达式”

在使用axios的React中尝试将多个参数传递给获取请求时出现415错误

如何将linux目录路径传递给函数

如何将目录分页项传递给角度函数

尝试打开 FTP 目录时出现 530 错误

尝试访问某些目录时出现输入/输出错误

尝试创建新用户时出现目录错误

使用-prune查找时,将保留修剪后的目录名称

尝试将值传递给函数时,会导致分段错误

尝试将复杂函数传递给辛普森规则时加载错误

尝试将图像传递给 AWS Rekognition 时出现 InvalidImageFormatException

尝试将csv从一个目录复制到另一个目录时出现HDFS“无此文件或目录”错误

在目录名称前添加目录名称

排除目录名称-ruby

如何获得目录名称

确定目录名称路径

在目录名称中使用“&”