无论是使用%%shell
还是!
,都应该可以工作。我怀疑您的shell脚本不在当前工作目录中。
您可以通过运行%ls
检查当前目录的内容。
这是一个完整的运行shell脚本的示例: https://colab.research.google.com/drive/1i5lHPcsmcgeoFEGg0Dfwjhblsm2iMExP
如果你在一个shell中,不仅仅是调用一个.sh
文件——你应该在自己的终端中得到相同的错误。你的shell没有在当前目录中查找shell命令,因此你需要为你的脚本添加一些路径上下文,以便让shell知道它是一个实际可运行的程序,通常通过在脚本前面添加一个点来实现,例如使用
$ . testAllLatin.sh
替代
$ testAllLatin.sh
请查看Unix Stack Exchange网站上的“在shell中命令前带点号的含义是什么?”。最佳回答总结如下:
在这种情况下,点号表示将该文件的内容“源化”到当前shell中。
source
本身是一个shell内置命令。而source
命令和点操作符是同义词。
就Colab和笔记本而言,%%shell
魔法功能以shell命令形式运行整个单元格。因此,您可以在单元格中简单地使用以下命令:
%%shell
. path/to/testAllLatin.sh
感叹号在shell中只运行单个命令行,因此您可以在其中插入Python代码。因此,您可以在一个cell中执行类似以下的操作:
print('this is Python stuff', 5+10)
!. path/to/testAllLatin.sh
print('is it all latin?')
无论如何,最好将shell单元格分开。
在Colab中
!chmod u+x test.sh
!./test.sh
以上是你需要做的。
!test.sh 寻找命令,所以它永远不会像你的本地脚本那样工作。 如果你需要它作为命令,请将其移动到 $PATH 目录中。
!
并运行了一个shell脚本,而不是像ls
这样的shell命令:“我想在colab中运行一个shell脚本:!testAllLatin.sh
。” - Gino Mempin