shell MacOS -一行命令在终端中有效,但在.sh脚本中无效?

goqiplq2  于 2023-05-29  发布在  Shell
关注(0)|答案(1)|浏览(221)

MacOS High Sierra
我有一个命令,我目前在终端中使用:

find /private/my/tmp -mindepth 1 -maxdepth 1 -type d -not -name -specialfolder -exec rm -r {} \;

其搜索文件夹private/my/tmp并移除除名为“specialfolder”的文件夹之外的所有文件夹。
这是从终端完美的工作,但我不能让它作为.sh shell脚本工作。我已经使用chmod +x /scripts/myscript.sh使其可执行,但这并没有造成任何差异。
shell脚本是:

#!/bin/sh
find /private/my/tmp -mindepth 1 -maxdepth 1 -type d -not -name -specialfolder -exec rm -r {} \;

从终端以“sh www.example.com“运行它myscript.sh不会产生任何结果,没有错误,什么都没有。
我需要做些什么才能让它作为.sh脚本工作?

  • PS -我认为这可能是权限问题,但我已经在/private/my/tmp文件夹上使用chmod -R 777设置了权限,仍然没有区别。
xmq68pz9

xmq68pz91#

这可能对任何人都没有帮助,但我也遇到了类似的问题,命令工作,但脚本不工作。我的问题是,我是在Windows PC上开发脚本,并将它们部署到Mac上,使用了不正确的EOL(行尾)字符。脚本不会运行,因为文件格式错误,但如果我通过Addigy或远程桌面会话将命令复制并粘贴到终端会话中,那么它就可以工作了。
运行sh -v myscript.sh(-v表示冗长)时,脚本中出现了^M(Windows EOL格式)字符,并提示我出现了错误。因为脚本的第一行是注解,而不正确的EOL字符意味着整个文件被连接到一行,脚本的其余部分根本没有运行,所以sh/bash甚至没有机会告诉我它无法解析脚本。
notepad++让我通过编辑> EOL转换> Unix(LF)来转换EOL字符。Mac(CR)有一个选项,但那是针对老得多的Mac。
希望对未来的搜索者有所帮助。好好享受吧!

相关问题