bash - 尝试将 for /f "tokens=*" %%a in ... 转换为 SHELL
问题描述
我正在尝试借助这种转换器手册将整个 BATCH脚本转换为 SHELL 脚本。
我几乎完成了,但我正在努力转换这个 FOR LOOP:
for /f "tokens=*" %%a in ('%adb% shell mkdir /usr/ui/^|find /i "File exists"') do (
if not errorlevel 1 goto :cannot_patch
)
我知道那for /f
是
循环命令:针对一组文件 - 有条件地针对每个项目执行命令。
但是,由于我是 SHELL SCRIPT(以及 BASH)的菜鸟,我最好的尝试是:
for -f "tokens=*" a in ( '$ADB shell mkdir /usr/ui/^|find /i "File exists"' ); do
if [ $? -nq 1 ]
then
cannot_patch
fi
done
这不起作用,导致Syntax error: Bad for loop variable
.
任何提示、链接或建议将不胜感激。
编辑
我试图了解到底('%adb% shell mkdir /usr/ui/^|find /i "File exists"')
在做什么。
我以为那些是 sh 命令,但事实证明我错了,那find /i
是试图
在文件中搜索(ing)文本字符串并显示找到它的所有行。
( https://ss64.com/nt/find.html )
|
是管道运算符,如果命令尝试创建已经存在的目录,"File exists"
应该是抛出的错误。mkdir
所以我想我可能可以更容易地写这个,但是,^
符号在/usr/ui/^
做什么?它是正则表达式吗?
编辑2
@glenn_jackman似乎确实是对的:也许我最好理解代码试图做什么。
因此,为了提供更好的上下文,这里是原始批次的更多代码:
for /f "tokens=*" %%a in ('%adb% shell mkdir /usr/ui/^|find /i "File exists"') do (
if not errorlevel 1 goto :cannot_patch
)
:cannot_patch
echo Error: Cannot create directory!
echo Patch is already installed or system files exist and might be overwritten.
choice /m "Do you want to continue"
if errorlevel 2 goto :END
goto :continue_patch
据我了解,代码正在尝试运行该adb shell mkdir
命令,如果它失败(抛出“文件存在”错误),它将询问用户他/她是否想继续。
所以在这种情况下,我想真正的问题是尝试编写一个在 SH 中执行相同操作的代码,可能不需要 for 循环。
不过,我正在寻找它......
解决方案
推荐阅读
- c++ - 如何查看向量内部的内容?
- javascript - 如何在 Hyperledger Fabric 中更新资产之前检查条件
- arrays - 从缺少元素的二叉树到python中的二维数组
- android - 从 Android Studio 运行本机应用程序时出现 Gradle 同步问题
- amazon-web-services - 我可以使用冰川存储类从已删除文件夹中恢复 S3 对象吗
- php - 如何计算两个日期之间的月份,包括起始日期月份?
- excel - 运行时错误 91 对象错误对象变量未设置
- python - VS 中的随机密码生成器 - Python 3
- bash - 如何将命令输出放入变量中
- windows - SendKeys.SendWait 不支持某些修饰符吗?