web-dev-qa-db-ja.com

コマンドラインからgeditを呼び出すときに、「geditsomething&disown」の動作をデフォルトの動作に変えるにはどうすればよいですか?

コマンドラインからファイルをgeditすると、常にターミナルがロックされ、切り離されたプロセスに明示的にコマンドを送信するのにうんざりします。

geditgedit $* & disownのようなものとしてエイリアスしようとしましたが、それが正しい構文ではないか、実行可能なバイナリコマンドをエイリアスでオーバーロードすることが許可されていません(.bash_aliases関数でそれを使用してみました。

alias gedit=editorz

function editorz()
{
  gedit $* & disown
}

)、しかしそれはかかりません。

では、コマンドgedit test.txtで元のターミナルウィンドウをロックしないようにするにはどうすればよいですか?

3
Kzqai

それはうまくいくはずです:あなたの.bash_aliasesが読まれてもよろしいですか? (これは標準ファイルではありませんが、~/.bashrcによって提供されている可能性があります。.bashrc.bash_profileについて混乱している場合は、 。bashrcと.bash_profileの違い)を参照してください。 。)

関数にバグがあります。

editorz () {
  gedit "$@" & disown
}

お使いのバージョンは、スペースまたはシェルワイルドカードを含むファイル名では機能しません。 functionキーワードはオプションです。

関数geditを呼び出すことができます(そしてエイリアスを完全に省くことができます)が、関数内の呼び出しは関数ではなくコマンドに対するものであることをシェルに伝える必要があります。

gedit () {
  command gedit "$@" & disown
}

誤ってフォアグラウンドでgeditを開始した場合(つまり、ターミナルをロックした場合)、を押すとバック​​グラウンドに置くことができます。 Ctrl+Z ターミナルで、コマンドbgを入力します。

(ターミナルではなく)Utilitiesフォルダからgeditを開くと、問題が解決します。

1
rimrim

エイリアスの前にfunction editorz()が定義されていることを確認してください。

私はあなたのアプローチを試しましたが、問題なく機能しました。

1
wag