gpt4 book ai didi

sh - 找到 : missing argument to -exec when run from file but not from cli

转载 作者:行者123 更新时间:2023-12-04 13:31:41 24 4
gpt4 key购买 nike

我有一个看起来像这样的文件

#!/bin/bash

find . -type f -exec chmod 644 {} \;
find . -type f -exec chown vagrant:www-data {} \;
find . -type d -exec chmod 755 {} \;
find . -type d -exec chown vagrant:www-data {} \;

假设它叫做 foo.sh我在 Ubuntu 14.04 机器上,在执行它之前我有 root 权限 sudo su

如果我调用 sh foo.sh,命令行会告诉我:

# sh foo.sh 
: not foundh: 2: foo.sh:
find: missing argument to `-exec'
find: missing argument to `-exec'
find: missing argument to `-exec'
find: missing argument to `-exec'
: not foundh: 7: foo.sh:

但是当我直接从命令行依次运行 4 个命令时,它就可以工作了。问题是:怎么了?为什么它会提示第 2 行和第 7 行(它们是空的)

谢谢(:

最佳答案

感谢@fejese的帮助我设法修复了它。

问题是文件有 Windows/DOS 行结尾。不知道为什么,也许我在我的 Windows 机器上打开过一次。比它是如何发生的更重要的是我该如何解决它。

首先找出使用的是什么文件后缀。因此我们可以使用命令行:

file foo.sh

如果输出如下:

foo.sh: Bourne-Again shell script, ASCII text executable, with CRLF line terminators

如果你有 CRLF line terminators 东西,那么你必须用 dos2unix 程序修复它。

sudo apt-get install dos2unix
dos2unix foo.sh
file foo.sh

如果你还没有安装 dos2unix,你只需要运行 apt-get 的东西(第一行)。现在它应该看起来像这样:

foo.sh: Bourne-Again shell script, ASCII text executable

现在你可以毫无问题地运行它了

sh foo.sh

有关文件、dos2unix 和 unix2dos 的进一步阅读,您可以在此处找到:View line-endings in a text file

关于sh - 找到 : missing argument to -exec when run from file but not from cli,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27771800/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com