如何通过在Ubuntu中包含“ cd”命令来运行Shell脚本?

时间:2019-01-08 20:53:26

标签: bash shell ubuntu terminal gnome-terminal

我试图执行一个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”之后的部分代表文件存储的文件夹路径。

1 个答案:

答案 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文件中的所有内容都会被扔掉,因为这就是它的目的。因此,现在您的脚本可能取决于可能会更改的内容。这可能会导致错误意外地爬入脚本。