如果有人可以向我解释这部分代码的作用,我会很高兴
[ -n "${0%/*}" ] && cd ${0%/*}
. ./environment.sh
. ./readParams.sh
我知道这个脚本是从./enviroment.sh
和./readparams.sh
但我真的很难理解第一行代码的作用。所以我可以理解之后的整个过程。
如果你能给我一个网站或任何能帮助我理解这种语法的东西,我会很高兴。我是 shell 脚本的初学者,因此不胜感激。
如果有人可以向我解释这部分代码的作用,我会很高兴
[ -n "${0%/*}" ] && cd ${0%/*}
. ./environment.sh
. ./readParams.sh
我知道这个脚本是从./enviroment.sh
和./readparams.sh
但我真的很难理解第一行代码的作用。所以我可以理解之后的整个过程。
如果你能给我一个网站或任何能帮助我理解这种语法的东西,我会很高兴。我是 shell 脚本的初学者,因此不胜感激。
那是一个shell脚本,而不是python。
[ -n "${0%/*}" ] && cd ${0%/*}
这会将当前工作目录更改为 shell 脚本所在的目录。
. ./environment.sh
. ./readParams.sh
这提供了两个列出的 shell 脚本,可能存储在与被调用脚本相同的目录中。
要分解第一行,$0
将包含命令的第一个参数,即被调用的脚本。${0%/*}
执行参数替换以删除尾随部分(从最后/
开始),因此这有效地为您提供了目录名称。
[ -n "${0%/*}" ]
转换为“如果 "${0%/*}"
结果字符串不为空”。
因此,整行翻译为“如果执行的脚本以路径为前缀,则cd
指向该目录”。
ps 我不相信这是实现这一目标的最佳方法,但这几乎就是它的作用。就个人而言,我会选择更具可读性cd $(dirname "$0")
或更强大的解决方案,请参阅从内部获取 Bash 脚本的源目录。
首先,这根本不是python,甚至不是关闭!
[ -n "${0%/*}" ] && cd ${0%/*}
它使用了参数扩展,你可以 man bash 看到它。
基本上,它cd
是你的脚本所在的目录。例如:
如果您的脚本位于:
/foo/bar/baz/xxx.sh
上面的行确实cd /foo/bar/baz
文件:
environment.sh
readParams.sh
在同一目录中xxx.sh