我试图执行一个Shell脚本来自动执行该过程,而不是手动运行python脚本。但是我找不到错误文件夹。
cd /home/gaurav/AndroPyTool
export ANDROID_HOME=$HOME/android-sdk-linux/
export PATH=$PATH:$ANDROID_HOME/tools
export PATH=$PATH:$ANDROID_HOME/platform-tools
source ~/.bashrc
source droidbox_env/bin/activate
alias mycd='cd /home/gaurav/AndroPyTool/test'
mycd
pwd
python androPyTool.py -all -csv EXPORTCSV.csv -s mycd
>>>> AndroPyTool -- STEP 1: Filtering apks
Folder not found!
这是我遇到的错误,因为脚本无法找到我上面提供的路径。 代码中“ -s”之后的部分代表文件存储的文件夹路径。
答案 0 :(得分:1)
这里的问题是您没有将路径传递给python程序。 python程序不知道bash别名,并且bash仅在将令牌解释为命令时才会扩展别名。
当bash读取python androPyTool.py -all -csv EXPORTCSV.csv -s mycd
时,它将python
解释为命令,所有其他用空格分隔的标记都是将传递给python的参数。然后,Python调用androPyTool.py
并将后续参数传递给该脚本。因此,程序实际上接收mycd
作为-s
的参数。
此外,即使mycd
被扩展,它也不是-s
的正确参数。 androPyTool.py
仅期望/path/to/apks
,而不是cd /path/to/apks/
。
我真的不认为在此脚本中使用别名很有意义。实际上,这使脚本更难以阅读和理解。如果要包装命令,建议您定义一个函数,偶尔也可以使用变量扩展(但这会混合代码和数据,这可能会导致问题)。 编辑:如注释中所指出,脚本禁用了别名。
最后,您的脚本还有其他一些可疑的问题。主要是为什么要采购.bashrc
?如果此脚本由您在用户的环境中运行,则.bashrc
将已经被获取,因此无需重新获取它。另一方面,如果不打算在您的环境中运行此脚本,而在脚本中需要在.bashrc
文件中包含某些内容,则建议仅将其删除,不要进行其他操作。
但是,我能看到的最直接的问题是,在修改路径后采购.bashrc
可能会覆盖您对PATH
所做的更改。根据{{1}}文件的内容,获取该文件可能不是幂等的,这意味着多次运行该文件可能会产生副作用。最终,.bashrc
文件中的所有内容都会被扔掉,因为这就是它的目的。因此,现在您的脚本可能取决于可能会更改的内容。这可能会导致错误意外地爬入脚本。