これは問題ではなく、好奇心の問題です。 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
このコマンドは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/atom
。 file
の出力により、次のことが確認されます。
$ 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