web-dev-qa-db-ja.com

Nautilusがターミナルウィンドウとしてスクリプトを開くようにします

Mac OS Xでは、.shファイルをダブルクリックすると、スクリプトを実行しているターミナルウィンドウがポップアップ表示され、スクリプトを操作できます。

Ubuntuでは、スクリプトをダブルクリックすると、その効果がすぐにわかります。スクリプトが実行されます。それだけで、その方法で起動すると、コマンドラインウィンドウは開きません。もちろん、ターミナルからスクリプトを実行することはできますが、サブフォルダーに編成されたScriptsフォルダーを用意し、スクリプトをダブルクリックしてターミナルウィンドウとして起動するのは良いことです。ランチャー(.desktop file)が、これをグローバルに適用したい。

2
Manchineel

前書き

以下のスクリプトは、_gnome-terminal_およびbash Shellがどのように動作するかのいくつかのアイデアをまとめて、選択されたプログラムをグラフィカル端末で実行するための右クリックメニューエントリを作成します。もちろん、これはマウスを使用したダブルクリックではありませんが、使用可能で迅速なソリューションです。右クリックしてSキーを押すと、「スクリプト」サブメニューにすばやくジャンプして、さらに高速化できます。さらに、これは選択された複数のファイルで機能し、それぞれのファイルのターミナルウィンドウを開きます。

デモ

Nautilusで開いたディレクトリにテスタースクリプト(単に "Hello World"を出力して終了する)があるとします。このスクリプトに既に実行可能な権限があると仮定しましょう。ファイルを右クリックして、スクリプト-> run_with_terminal.pyを選択します

enter image description here

ターミナルウィンドウが表示され、適切に出力が行われ、ユーザーがEnterキーを押して終了するまで待機します。

スクリプトソース

GitHub でも利用可能

_#!/usr/bin/env python
from os import path
from sys import argv
from subprocess import call

for item in argv[1:]:
    full_path = path.abspath('./' + item)
    call(['gnome-terminal','-e', 
          "bash -c '" +  full_path + ";read'"])
_

特権バージョン

_#!/usr/bin/env python
from os import path
from sys import argv
from subprocess import call

for item in argv[1:]:
    full_path = path.abspath('./' + item)
    call(['gnome-terminal','-e', 
          "pkexec bash -c '" +  full_path + ";read'"])
_

動作原理

Gnomeターミナル(Ubuntuのデフォルトターミナル)では、_-e_フラグを使用してコマンドを実行できますが、問題はコマンドの終了を待つことです。画面に何かを印刷してすぐに終了するスクリプトまたは実行可能ファイルがある場合は、ターミナルウィンドウが点滅して消えるだけです。

基本的に、1つのコマンドのみを実行できます。一方、_bash -c 'command1;command2;command3'_を使用する場合、これはgnome-terminalによって1つのコマンドとして扱われますが、実際にはbashシェルの子プロセスとしていくつかを実行できます。これは新しいものではなく、 ずっと前に表示 です。

最後に、ウィンドウがすぐに終了しないように、readを読み取るstdinコマンドを使用します。これの基本的な使用法は、ユーザーがEnterキーを押してウィンドウを閉じることができるようにすることです(IDEでのCプログラミングのgetch()を使用することにより、一種の適応されたトリック)

ファイルマネージャー(別名Nautilus)では、選択したファイル/フォルダーを操作するカスタムスクリプト( `〜/ .local/nautilus/scriptsに配置)を使用できます。ファイルを右クリックして、スクリプトサブメニューで適切なエントリを選択するとアクセスできます。

したがって、このすべての知識をまとめると、上記の作業スクリプトが得られます。 Pythonは単に私が選択した言語でしたが、この同じ考えはPerl、Ruby、Shellスクリプトなどのいずれかに実装できました。

3