質問: GUIプログラムのシンボリックリンクを作成し 端末からバックグラウンドで起動したい(コマンド実行後も 端末を使える状態にしたい)のですがうまく行きません。 以下の3パターン作成してみましたが、結果は同じで 端末の入力可能状態が帰って来ませんでした。 1 ln -s /usr/local/cmd1 /usr/bin/cmd1 2 ln -s "/usr/local/cmd1 &" /usr/bin/cmd1 3 cmd1.shを作成(中身は「/usr/local/cmd1 &」)後、 ln -s /usr/local/cmd1.sh /usr/bin/cmd1 〜〜追記〜〜 わかりにくくてすみません。 1〜3とも実行結果の見た目(端末上の見た目)は同じなのですが 3の方法で実行し、再度Enterキー押下すると端末が入力可能に なることがわかりました。 3の例) user@user-PC:~$ cmd1 <Enter> 〜起動ログ〜 〜起動ログ〜 〜起動ログ〜 <ここでGUIが起動しログが止まるので Enterすると> user@user-PC:~$ ↑ 入力可能になる ただ、起動が完了した時点でEnterを押下せずとも 入力が戻ってくるようにはできないでしょうか? 理想) user@user-PC:~$ cmd1 <Enter> 〜起動ログ〜 〜起動ログ〜 〜起動ログ〜 user@user-PC:~$ ↑ 起動完了時に自動的に入力可能なる。
回答: 3は実はうまくいっているのではないでしょうか。 GUIプログラムの標準出力・標準エラー出力に埋もれて、 端末に制御が戻っていないように見えているのではないでしょうか。 試しに3の中身を ``` #!/bin/sh cmd1 >/dev/null 2>&1 & ``` のようにして標準出力・標準エラー出力が端末に表示されないようにすると、 制御が戻っているように見えないでしょうか。 また、2の方法に関してですが、 シンボリックリンクは特定のファイル(今回はGUIプログラムだと思います)に対するリンクを貼るのみ、 (ハードリンクとの混同を恐れずに言うと別名をつけるのみ)ですので、 実行時のオプションであったり、バックグラウンドで実行するかどうかの指定などを含めることはできません。