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设置了权限,仍然没有区别。
1条答案
按热度按时间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。
希望对未来的搜索者有所帮助。好好享受吧!