![Tor 启动器命令分析](https://linux22.com/image/178982/Tor%20%E5%90%AF%E5%8A%A8%E5%99%A8%E5%91%BD%E4%BB%A4%E5%88%86%E6%9E%90.png)
我是一个对脚本非常感兴趣的初学者,现在我只是好奇什么执行以下命令的每个部分(来自 Tor 启动器)
sh -c '"/home/user/tor-browser_en-US/Browser/start-tor-browser" --detach || ([ ! -x "/home/user/tor-browser_en-US/Browser/start-tor-browser" ] && "$(dirname "$*")"/Browser/start-tor-browser --detach)' dummy %k
我在这里找到:https://askubuntu.com/questions/831847/what-is-the-sh-c-command那:
“
sh
将该程序sh
称为解释器,并且该-c
标志表示按照该程序的解释执行以下命令。”
然后有一个脚本路径start-tor-browser
,并且--detach
(如果我理解正确的话)只是将 Tor 浏览器进程与终端分离。
我在这里找到了一些信息--detach
:https://superuser.com/questions/178587/how-do-i-detach-a-process-from-terminal-entirely
据我所知,这-x
意味着“使其可执行”,&&
意味着“还执行另一个命令”,也许!
意味着“强制它?”。
dummy %k
那么最后有没有表示指向当前目录(或文件)的符号链接?
我不明白为什么有双引号:' "
,这个奇怪的||
双括号([
和这个"$(dirname "$*")
。
如果您更好地理解这段代码,请告诉我:)。
谢谢你!
答案1
您正确地描述了命令第一部分的工作原理。我会尝试回答你的一些问题。
||
是逻辑或,因此命令行的其余部分将在新的中执行子外壳(这就是(...)
意思)仅当第一个命令以状态 >0 退出时即失败。
[ ! -x file ]
检查文件是否是不是(!表示否定)可执行(或不存在)。
&&
是逻辑 AND,因此如果该条件为真(主目录中没有 exec 文件)命令行执行将继续。