我使用了 @Artem S. Tashkinov 建议的脚本:”我为自己编写了这个,但它在控制台上运行。”
$sh raw_io.sh:
20: shopt: not found
raw_io.sh:
48: declare: not found
raw_io.sh:
61: Syntax error: redirection unexpected
我发现我只需使其可执行并双击它,然后“在终端中运行”:
由于它令人耳目一新,我无法复制/粘贴输出。所以我做了一个截图:
由于它可以通过双击运行,但我需要单击“在终端中运行”,我还想知道如何直接从终端启动它。
~/Desktop$ raw_io
raw_iso: command not found
那么这些启动方式有什么区别呢?
答案1
如何执行名为 的脚本myscript
?
sh myscript # Or sh /path/to/myscript
bash myscript # Or bash /path/to/myscript
perl myscript # Or perl /path/to/myscript
python myscript # Or python /path/to/myscript
ETC。
这很简单,但您确实需要知道使用哪个解释器来运行脚本,并且您已经注意到尝试使用错误的解释器会生成错误(例如使用sh
而不是bash
)。
更好的是让脚本自己声明正确的解释器。这是使用#!
第一行的 定义的。例如,这一行将声明bash
(特别是/bin/bash
)作为解释器:
#!/bin/bash
要使用此功能,您需要使脚本可执行,
chmod a+x myscript
然后,只要它位于指定的冒号分隔目录列表之一中,$PATH
您就可以像任何其他程序一样运行它 - 只需使用它的名称
myscript
但是,请注意,当前目录(标记为.
)不在其中$PATH
,因此如果您正在当前目录中处理脚本,则需要提供脚本的路径以便可以找到它。这里.
代表的是当前目录它是相对于当前工作目录的路径(即同一位置):
./myscript # Or /full/path/to/myscript
有充分的理由为什么.
通常不在 中$PATH
,但如果必须添加它,请将其放在末尾$PATH
而不是开头。 (看UNIX 的历史记录不包括 $PATH 中的当前目录和为什么是 。默认不在路径中?.)
请注意,脚本名称或扩展名并不重要(除非您最终使用的命令名称test
已经存在于 中列出的系统目录中$PATH
)。我myscript
在这里用作示例。如果您愿意,您可以使用myscript.sh
,甚至可以使用confusion.png
,但您不使用,ls.exe
所以我认为没有必要使用myscript.sh
。但请注意,某些 GUI 可能会使用文件扩展名来猜测文件中的内容,并且以非标准方式(例如png
脚本)使用扩展名可能会使它们感到困惑。 GUI 识别文件内容的正确方法是使用与该命令等效的命令file
,但并非所有方法都这样做:
file myscript
最后,当我完成一个脚本的工作后,我将重用它,我倾向于将其放入我的$PATH
.然后它就成为像ls
或一样易于访问的工具cp
。就我而言,我使用$HOME/bin
但您可以选择任何您喜欢的目录,只要它在$PATH
.