我想在处理Linux/Unix的shell时不要浪费宝贵的时间.
如果我能够很好地理解它,那就太好了.除此以外:
我可能最终会因为设置crontab而失去一天.
我会一直想知道为什么这个脚本中的shebang 不起作用.
我会一直想知道真正的区别是什么:
.run.sh
./run.sh
../run.sh
sh run.sh
sh ./run.sh
你知道,正是这些事情使我的Linux/Unix生活陷入瘫痪.
作为程序员,我希望在这方面做得更好.我想最好继续使用广泛使用的bash shell,但我可能错了.无论我使用什么工具,我都需要了解它的内涵.
什么是最终解决方案?
纯娱乐:
. run.sh
---"源代码"run.sh中的代码.通常,这用于将环境变量放入当前的shell进程中.你可能不希望这个被调用的脚本run.sh
.
./run.sh
---执行run.sh
当前目录中的脚本.通常,当前目录不在默认路径中(请参阅参考资料$PATH
),因此您需要显式调出相对位置.该.
字符的使用方式与第1项中的不同.
. ./run.sh
--- run.sh
从当前目录中获取脚本.这结合了.
项目#1和#2的使用.
sh run.sh
---使用sh
shell解释器run.sh
.Bourne shell的通常是运行shell脚本的默认,所以这可能是一样的第2项,除了它找到的第一个run.sh
中$PATH
,而不是一个在当前目录.
sh ./run.sh
---除了wordier之外,这通常与#2相同.
命令行界面,例如各种shell解释器,往往非常深奥,因为它们需要在很少的字符中包含很多含义.否则打字需要太长时间.
在学习方面,我建议在你感到舒服之前使用bash
或ksh
不要让任何人跟你说话.请不要学习,csh
或者稍后在开始使用Bourne-type shell时需要忘记过多.
此外,crontab
条目比shell的其他用途有点棘手.我的猜测是你浪费了时间,因为你的环境设置与命令行不同.如果可能的话,我建议在其他地方开始.
手册页可能是"终极"解决方案.我总是对他们所包含的宝石感到惊讶.
您甚至可以man bash
用来回答您在此问题中提出的一些问题.