私は、グラフィックデスクトップを使用するよりも、ターミナルウィンドウでGUIアプリケーションを起動する方が好きです。一般的な苦情は、開発者がこのタイプの使用を予期しないことが多いため、アプリケーションがstdoutまたはstderrに役に立たない、秘密、または情報のないメッセージを一括印刷することです。 & を使用してバックグラウンドでプログラムを実行すると、ジョブの作成と終了に関するレポートが生成されるため、端末でさらに混乱が発生します。
コマンドライン引数を受け入れてオートコンプリートを処理するこれらの問題の回避策は何ですか?
関連:https://stackoverflow.com/questions/7131670/make-bash-alias-that-takes-parameter
ベストアンサー1
標準エラーを直ちにリダイレクトすることは、以前の/dev/null
エラーメッセージを隠してエラーを診断するのが難しいかもしれないので、悪い考えです。次のzshスクリプトを使用することをお勧めしますstart-app
。
#!/usr/bin/env zsh
coproc "$@" 2>&1
quit=$(($(date +%s)+5))
nlines=0
while [[ $((nlines++)) -lt 10 ]] && read -p -t 5 line
do
[[ $(date +%s) -ge $quit ]] && break
printf "[%s] %s\n" "$(date +%T)" "$line"
done &
ただ実行してみてください:start-app your_command argument ...
スクリプトは最大5秒間最大10行のメッセージを出力します。ただし、アプリケーションが直ちにクラッシュした場合(たとえば、分割エラーのため)、エラーメッセージは表示されません。もちろん、必要に応じてこのスクリプトをさまざまな方法で変更できます。
注:zshで補完機能を使用するには、start-app
次のようにします。
compdef _precommand start-app
バッシュから:
complete -F _command start-app
(でおよびexec
からtime
コピー/usr/share/bash-completion/bash_completion
)。