自动构建CyanogenMod的Bash脚本中出现“repo: command not found”错误

4
我正在运行linux mint 17.2,已经安装了repo并将路径添加到我的.bashrc中。我以前曾启动过repo
我按照Android源码下载如何为CyanogenMod构建页面上的说明进行操作。 问题是:我编写了一个bash脚本来自动化一些命令,用于启动构建。我简单编写的脚本如下:
#!/bin/bash
cd ~/Android/Cyanogenmod/cm12_1/android/system
source build/envsetup.sh
repo sync --force-sync -j8
exec $SHELL

当我运行这个程序时,它会报告:
/home/username/Desktop/Cyanogenmod_cm12_1_Grouper_Build : line 4 repo: command not found

如果我将每一行复制并粘贴到一个新的终端实例中(或者通过运行一个脚本 #!/bin/bash exec $SHELL 打开一个终端),它可以完美地工作。

我尝试过的方法:在 repo sync --force-sync -j8 前加入 sleep 10,但没有任何效果。我还尝试了明确启动 repo 并将其强制添加到当前终端会话的 PATH 中,然后再尝试 repo sync --force-sync -j8。测试代码如下:

#!/bin/bash
mkdir -p ~/Android/Cyanogenmod/bin
curl https://storage.googleapis.com/git-repo-downloads/repo > ~/Android/Cyanogenmod/bin/repo
chmod a+x ~/Android/Cyanogenmod/bin/repo
cd ~/Android/Cyanogenmod/cm12_1/android/system/
source build/envsetup.sh
PATH=~/Android/Cyanogenmod/bin/repo:$PATH
repo sync --force-sync -j8
exec $SHELL

以下两个问题有相似的标题,但都不是我的问题,分别是 这个这个
如果有任何帮助或建议,将不胜感激,谢谢!

这个问题太嘈杂了。Command not found就是command not found,简单易懂。你的脚本可以简化为一个shebang和一个单独的命令“repo”,即使没有这篇冗长的文字描述,你仍然会得到完全相同的错误。 - 4ae1e1
1
你的错误在于 PATH=~/Android/Cyanogenmod/bin/repo:$PATH。你需要的是 PATH=~/Android/Cyanogenmod/bin:$PATH - 4ae1e1
所以,如果我执行以下命令: User@User ~ $ $PATH 我会得到以下输出: bash: /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/home/michael/Android/Cyanogenmod/bin: 没有那个文件或目录 - Michael
1
不,我是让你在脚本中输入“echo $PATH”。 - 4ae1e1
确实没有......嗯我目前正在尝试将路径正确添加到我的.profile文件中。编辑:今晚似乎不是我的夜晚.....注销并重新登录,一切都正常。我只是在我的.profile文件的末尾添加了“export PATH=$PATH:$HOME/Android/Cyanogenmod/bin”(这是我curl到的存储库),注销/登录后,在echo $PATH中显示,并且我的上面的代码可以正常运行。再次感谢 - Michael
显示剩余2条评论
1个回答

0
总结一下,出现了2个问题。第一个是我尝试手动在脚本中设置路径时出错了。原本的代码是:PATH=~/Android/Cyanogenmod/bin/repo:$PATH,其实应该是PATH=~/Android/Cyanogenmod/bin:$PATH
第二个问题是更大的问题,是我在.bashrc中错误地添加了PATH变量(到repo)。这个问题得以解决,是因为我在.profile最后添加了export PATH=$PATH:$HOME/Android/Cyanogenmod/bin这行代码,并完成退出并重新登录的操作。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接