web-dev-qa-db-ja.com

Alt-F2ダイアログでエイリアスを使用する

.bashrcファイルでは、コマンドのエイリアスを追加できます。たとえば、

alias geditm = 'gedit --display=D1'

これで、ターミナルでgeditmを実行し、ディスプレイD1でgeditを開くことができます。 Alt-F2メニューからコマンドを実行するためのエイリアスを定義する方法があるかどうか興味があります。 Alt+F2geditmと入力すると、同じ結果が得られます。

私はこれをgeditだけでなく一般的に行うことに興味があります。

6

そうでもない詳細はわかりませんが、 Alt+F2 実行するコマンドを非対話型、非ログインシェルに渡すだけです。 man bash で説明されているように、このタイプのシェルはエイリアスにアクセスできません。

   When bash is started non-interactively, to  run  a  Shell  script,  for
   example, it looks for the variable BASH_ENV in the environment, expands
   its value if it appears there, and uses the expanded value as the  name
   of  a  file to read and execute.  Bash behaves as if the following com‐
   mand were executed:
          if [ -n "$BASH_ENV" ]; then . "$BASH_ENV"; fi
   but the value of the PATH variable is not used to search for  the  file
   name.

そのため、エイリアス定義を含むファイルを指すようにBASH_ENVを設定できると考えるかもしれません。残念ながら、非対話型シェルではエイリアスを使用できません。再び man bash から:

   Aliases are not expanded when the Shell is not interactive, unless  the
   expand_aliases  Shell option is set using shopt (see the description of
   shopt under Shell BUILTIN COMMANDS below).

shopt -s expand_aliasesで定義されたファイルに$BASH_ENVを追加できると思うかもしれませんが、そのファイルは異なるシェルで読み取られるため機能しません。

これは紛らわしいことを知っています。要するに、エイリアスを利用可能にすることはできません Alt+F2 ダイアログ。


回避策

したがって、エイリアスではこれを実行できないため、canでできることはスクリプトで実行することです。

Sudo -H gedit /usr/bin/geditm

新しいgeditウィンドウが表示され、これらの行を追加してファイルを保存します。

#!/bin/bash
gedit --display=D1

スクリプトを実行可能にします。

Sudo chmod a+x /usr/bin/geditm

今、あなたはヒットすることができます Alt+F2geditmと記述すると、そのスクリプトが起動され、希望のオプションでgeditが起動されます。

8
terdon

注:質問を読み直してより長く考えた後、terdonによる答えはおそらくあなたが望むものであり、これではないでしょう。これはあまりにも一般的で、より多くの入力が必要です。

私が正しく理解していれば、Alt-F2から実行するプログラムに--display=D1を追加したいようです。これは正しいです?おそらく議論はしていませんが、別のテイクについては、これとともに「EDIT2」を確認してください。

その場合、~/binのようなパス内のあるフォルダーに存在する単純なスクリプトを作成できるようです。

#!/bin/bash
$1 --display=D1

スクリプトに「display」という名前を付けると、Alt-F2からdisplay geditを実行でき、「-display = D1」を追加する必要があります。

編集:chmod +x displayを使用して、実行可能にする必要があると思います

私はそれを簡単にテストすることはできませんが、うまくいくはずです(これがあなたのやりたいことだと仮定します)。

EDIT2:私はあなたの質問を完全には理解していなかったようですが、私はあなたがまだ同様の方法を使用できると思います。フラグを指定する代わりに、コマンドとフラグの両方に置換を使用できます。私はあなたが単に言うことができると思います

$*

の代わりに

$1 --display=D1

Alt-F2コマンドは「display xxxx yyyy ...」になります

1
Marty Fried