web-dev-qa-db-ja.com

Atomエディターはデフォルトでバックグラウンドで開きます

これは問題ではなく、好奇心の問題です。 Atom atomを使用してコマンドラインからエディターを開くと、バックグラウンドで開きます(つまり、ターミナルですぐにコマンドプロンプトに戻ります)。 applicationnameを使用してコマンドラインでアプリケーションを開くと、フォアグラウンドで実行されます。バックグラウンドで実行したい場合は、通常、applicationname &代わりに。

なぜ私はやらなければならないのですかatom &

私が言ったように、私は通常同じディレクトリで作業を続けたいので、これは問題ではありませんが、私はその理由に興味があります。

$ file $(which atom)
/usr/bin/atom: Bourne-Again Shell script, ASCII text executable/usr/bin/atom: Bourne-Again Shell script, ASCII text executable
1
partial_mask

このコマンドはatomプロセスを直接開始せず、スタータースクリプトを開始するだけなので、バックグラウンドでatomを開始する必要はありません。 /usr/bin/atomスクリプトは、CLIオプションを評価し、realatomプロセスを開始する前に一連の変数を設定しますバックグラウンドサブシェルで、180行目以降を参照してください。 (私のコメント):

# start a subshell in the background (note “&” below!)
(
# start the Atom process with the current script’s PID redirecting its output to Nohup.out
Nohup "$ATOM_PATH" --executed-from="$(pwd)" --pid=$$ "$@" > "$ATOM_HOME/Nohup.out" 2>&1
# in case of any error, print the output and exit
if [ $? -ne 0 ]; then
  cat "$ATOM_HOME/Nohup.out"
  exit $?
fi
) &

ここから始まる実際のatom実行可能ファイルがどれかを見てみましょう。

  • 始まる $ATOM_PATH、これは163行目に設定されています。

    ATOM_PATH="$USR_DIRECTORY/share/atom/atom"
    
  • $USR_DIRECTORYは150行目に設定されています:

    USR_DIRECTORY=$(readlink -f $(dirname $SCRIPT)/..)
    

    これは次と等しい:

    USR_DIRECTORY=$(readlink -f $(dirname /usr/bin/atom)/..) # equals
    USR_DIRECTORY=$(readlink -f /usr/bin/..) # equals
    USR_DIRECTORY=$(readlink -f /usr) # equals
    USR_DIRECTORY=/usr
    

これで、atom実行可能ファイルへの完全パスが取得されました:/usr/share/atom/atomfileの出力により、次のことが確認されます。

$ file /usr/share/atom/atom
/usr/share/atom/atom: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/l, for GNU/Linux 2.6.32, stripped
1
dessert