问题描述
在Windows中,我可以编写一个包含cmd命令的文件(通常为.cmd
或.bat
文件)。当我点击这些文件时,它会打开cmd.exe
并运行它们所包含的命令。
我将如何在Ubuntu中做到这一点?
我确信这是重复的,但我找不到我的答案。它与这些问题类似,但他们不回答这个问题:
Store frequently used terminal commands in a file
CMD.exe Emulator in Ubuntu to run .cmd/.bat file
最佳解决方案
有两种方法。
首先,最常见的是编写一个文件,确保第一行是
#!/bin/bash
然后保存该文件。接下来使用chmod +x file
将其标记为可执行文件
然后当你点击(或从终端运行文件)命令将被执行。按照惯例,这些文件通常没有扩展名,但是你可以用.sh
或其他方式结束。
一些注意事项:
-
任何(我的意思是任何)文件都可以在Linux中执行,只要第一行是应该解释该文件的程序的路径。常见的例子包括
/bin/python
,/bin/sh
,/bin/dash
,但即使是奇怪的球的工作也像/bin/mysql
-
Bash是一个完整的语言。它比Windows中的cmd.exe复杂得多。它具有强大的编程语言,支持函数,循环,条件,字符串操作等。
-
如果遇到问题,These documents可能会有所帮助。
-
如果你不想让文件成为可执行文件,那么你可以通过将它作为参数传递给bash来运行它:
bash file/to/run.sh
一个简单的Bash例子
#!/bin/bash
echo "This is a shell script"
ls -lah
echo "I am done running ls"
SOMEVAR='text stuff'
echo "$SOMEVAR"
第二种方法是使用脚本记录命令。运行script
然后只是做东西。当你做完东西类型exit
和脚本将为你所有”stuff”你生成一个文件。这个用法不太常用,但对于像宏这样的东西来说效果很好。 man script
更多信息。
次佳解决方案
与Windows批处理文件等效的是shell脚本,一个很好的入门指南是Bash Scripting。
大多数情况下,您可以在命令行中输入的命令可以放在shell脚本中。
几种与Windows批处理文件不同的内容:
-
有不同的命令解释器,称为shell。默认是bash,但如果你感兴趣,还有其他的,比如zsh,ksh,dash,perl,python等。
-
要运行一个shell脚本,您需要使该文件成为可执行文件,您可以使用
chmod +x <filename>
-
在Ubuntu中,当前目录不是程序搜索路径,因此您需要运行
./<filename>
而不是<filename>
-
变量名称是
$<varname>
,而不是%<varname>%
-
shell脚本中的命令不是默认打印的,如在批处理文件中。
-
文件名的扩展名可以是
.sh
或(更习惯),您不需要使用扩展名。将#!/bin/bash
放在文件的第一行,它告诉Ubuntu使用什么程序来运行该文件。 -
评论从
#
开始,而不是rem
。
希望这有助于并且玩得开心脚本!
第三种解决方案
你的意思是使用shell脚本写入文件?以下是几种方法:
touch file
这个方法只会创建一个文件,但是如果文件已经存在,它只会将修改日期更改为您使用该命令的时间。
echo "text" > file
该方法将file
的内容覆盖为text
。如果你想清除一个文件,你可以简单地这样做:
echo "" > file
假设你想写多行,而且你不想使用成千上万的echo
命令,你可以使用这个命令:
cat << EOF > file
test
test1
foo
bar
EOF
这使您可以在一个命令中写入多行。 file
的内容就是这样:
test
test1
foo
bar
如果要附加到文件,请将>
替换为>>
。
希望这可以帮助!
编辑:哦,我明白了,所以你会使用.sh
扩展名(可选,但它是个好主意)在gedit中编写文件,然后在文件管理器上右键单击该文件,选择Properties-> Permissions,并检查Allow executing file as program
。然后你可以在double-click上运行:)。另外,如果你想在终端中这样做,你可以运行这个命令来使其可执行(如果它不属于你,你可能想要预先配置sudo
):
chmod +x file
并运行:
./file