bashジョブリスト(jobsコマンド)の変数名を展開することは可能ですか?例えば。bashジョブリストで変数を展開する方法
[1] Angehalten vi $file
[2] Angehalten vi $file
などのジョブリストは、2つの異なる$ fileの値を持つviセッションを参照しています。今、特定のファイルを持つviウィンドウを前面に持っていきたいのですが、どのジョブ番号を持っているのか分かりません。
bashジョブリスト(jobsコマンド)の変数名を展開することは可能ですか?例えば。bashジョブリストで変数を展開する方法
[1] Angehalten vi $file
[2] Angehalten vi $file
などのジョブリストは、2つの異なる$ fileの値を持つviセッションを参照しています。今、特定のファイルを持つviウィンドウを前面に持っていきたいのですが、どのジョブ番号を持っているのか分かりません。
アレックスの答えに似ていますが、すべてのペーストとサブプロセスのトリックはありません。 FreeBSD 10.0でbash v4.3.30で動作しました
jobs -p | xargs ps -p |テール-n + 2 | awkの{印刷SUBSTR($ 0インデックス($ 0、$ 5))} '
あなたはそれぞれのPIDを取得するためにjobs -l
を使用して、拡張された文字列が表示されますps
の出力、でそれらを見ることができます:
$ jobs -l
[2]- 6445 Suspended: 18 vi $file
[3]+ 6473 Suspended: 18 vi $file
$ ps | grep vi
6445 ttys000 0:00.03 vi x
6473 ttys000 0:00.03 vi y
6485 ttys000 0:00.00 grep --color vi
次のコマンドは動作するはずです(bashの4.2でテスト。 Ubuntuの11.10)で10
paste <(jobs) <(jobs -p | xargs ps -p | tail -n+2 | awk '{print substr($0, index($0, $5))}')
出力:
[1] Stopped vi $A vi a
[2]- Stopped vi $A vi b
[3]+ Stopped vi $A vi c
アイデアはCarl'sと同じです - プロセスIDでコマンドを抽出してください
はよさそうだが、私はbashスクリプトファイルにラインを入れた場合、何らかの理由でそれが動作しません。 – highsciguy
これは.bashrcの関数として機能しますが、バックグラウンドに複数のプロセスがある場合に限ります。 – highsciguy
これは、スクリプトが別のサブシェルで実行されているためです(明らかに、現在のシェルと同じ 'jobs'リストを持たない)。それを関数として使用したくない理由はありますか? – tripleee
コマンドを実行する前に変数を試してみてください。 ファイルに書き込むことなくこれを行う方法があるかもしれません。 mktempを使用しない場合は、一時ファイルを開始してください。
cmd1=sleep
echo "$cmd1 10 &" > /tmp/veryscary.sh && source /tmp/veryscary.sh
jobs -p | while read pid; do ps auxwq $pid; done | grep -v USER
Linuxシステムを指定した人にBSDスタイルのオプションを与えることは、ほぼ100%確信しています。 –
オプション "auxw"〜 "ps"を参照している場合は、これらのオプションはlinuxで動作します。私が知っている限り、彼らは実際にはlinux/* bsd/osx/cygwin /(多分他の人ですか?)で働いているので、私はそれらを使うのですが、それらをすべて単純な習慣から除外しました。私は "仕事"を引用しました。なぜなら、これらのフラグのいくつかは、一部のプラットフォームでは無視されているにすぎないからです。 cygwinの場合は、 '-q
Ubuntuでは動作しません。 'dhoelzer @ MON-01:〜$ ps auxwq' 'エラー:サポートされないオプション(BSD構文) ' –
ジョブ#を保持したい場合はどうすればいいですか? – Asher