私はスクリプトに興味がある初心者ですが、次のコマンド(Tor Launcherで)の各部分を実行するのはなぜですか?
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
それでは、最後に現在のディレクトリ(またはファイル)を指すシンボリックリンクがありますか?
なぜ二重引用符があるのか理解できません: ' "
、この奇妙な||
二重括弧([
とthis "$(dirname "$*")
。
このコードをよりよく理解したら、教えてください。 :)
ありがとうございます!
答え1
コマンドの最初の部分がどのように機能するかを正しく説明しました。私はあなたの質問に答えようとします。
||
論理 OR なので、コマンドラインの残りの部分は新しいコマンドラインで実行されます。サブシェル(これを(...)
意味します。)最初のコマンドがステータス> 0で終了した場合にのみ失敗します。
[ ! -x file ]
ファイルが存在することを確認してください。いいえ(!は否定を意味します)実行可能です(または存在しません)。
&&
論理ANDなので、条件がtrue(ホームディレクトリにexecファイルがない)の場合、コマンドラインの実行は続行されます。