web-dev-qa-db-ja.com

アプリケーションでファイルを開く `open`コマンド

端末でこのコマンドを実行できないのはなぜですか。

open index.html

私のブラウザでこのファイルを開くことはできませんでしたか?次のコマンドも実行できません:open index.html -a "Sublime Text"。これらのコマンドの結果は次のとおりです。

$ open index.html
Couldn't get a file descriptor referring to the console

$ open index.html -a "Sublime Text" - 
open: invalid option -- 'a' 
Usage: open [OPTIONS] -- command
13
Edgar Oliveira

OS Xの open コマンドの主な目的は、関連するアプリケーションでファイルを開くことです。最近の非OSX unicesでの同等のものは xdg-open です。

xdg-open index.html

xdg-openには、特定のアプリケーションでファイルを開くOSXのopen -aに相当するものがありません。これは、アプリケーションでファイルを開く通常の方法は、アプリケーションの名前に続けてファイルの名前を入力することであるためです。より正確には、アプリケーションを実装する実行可能プログラムの名前を入力する必要があります。

sublime_text index.html

Linux、他のUnixシステムと同様(ただし、私の知る限り、OS Xの非Unix部分ではありません) ソフトウェアをパッケージマネージャーで追跡して管理し、使用されている場所に個々のファイルを置きます 。たとえば、すべての実行可能プログラムは小さなディレクトリのセットにあり、それらのすべてのディレクトリは PATH variable にリストされています。 sublime_textを実行すると、PATHにリストされているディレクトリでsublime_textというファイルが検索されます。 OS Xは、単一のディレクトリツリーにアンパックされ、アプリケーションデータベースに登録されているアプリケーションを処理するために、open -aを介した追加レベルの間接参照を必要とします。 Linuxにはアプリケーションデータベースはありませんが、データベースを必要としないように編成されています。

コマンドsublime_text Shellを実行しても機能しない場合は、Sublime Textが正しくインストールされていません。私はこれを使用したことがなく、明らかに配布パッケージ(debやrpmなど)ではなくtarアーカイブとして提供されているため、追加のインストール手順を実行する必要がある可能性があります。これを自動化するのはSublime Textの作成者の仕事ですが、まだ作成していない場合は、おそらく次のコマンドを実行して自分で行うことができます。

Sudo -s …/sublime_text /usr/local/bin

もちろん、sublime_text実行可能ファイルがあるパスに置き換えます。

発生したopenコマンドは openvt コマンドの古い名前です(一部のLinuxディストリビューションでは、openvtという名前でのみ含まれています)。 openvtコマンドは新しい virtual console を作成します。これはrootによってのみ実行でき、ほとんどの人はグラフィカルウィンドウ環境でしか作業しないため、今世紀にはあまり使用されません。

使用しているオペレーティングシステムについては言及しません。

一部のLinuxディストリビューションでは、openコマンドは、新しい仮想コンソールでバイナリを開くopenvtコマンドへのシンボリックリンクです。それは明らかにあなたが望むものではありません。実際、エラーメッセージは、openvtコマンドを呼び出したことを示しています。このコマンドは、引数としてプログラムバイナリ(実行可能ファイル)を想定しています。

xdg-openこれは、openvtとは対照的に、引数として実行可能ファイルを想定していませんが、プログラムに関連付けられているファイルをプログラムで開きます。ファイルとURLを引数として渡すことができます。

したがって、xdg-open index.htmlはブラウザでファイルを開く必要がありますxdg-open image.pngは、画像ビューアなどでファイルを開く必要があります。

7
Marco

人々はしばしばxdg-openopenの機能をエミュレートするため、macOS openは少し異なります。1。stdout/stedrrから何もリダイレクトせず、2。ターミナルから実行したいものをすべて切り離します(これは、ほとんどの場合、GUIアプリを起動するときに必要なものであり、端末を置く必要はありません)

これを解決するために、標準のGNUツールを使用して適切な同等物を考え出しました(構文は魚のシェルですが、bashへの変換は簡単です):

function open
    for i in $argv
        setsid Nohup xdg-open $i > /dev/null 2> /dev/null
    end
end

追加

Bashシェルを使用している人のために、ここに関数があります:

open ()
{
    for i in $*
    do
        setsid Nohup xdg-open $i > /dev/null 2> /dev/null
    done
}
3
rien333

私の解決策(毎日使用)は、xdg-openaliasを使用することです。

これを~/.bashrcに貼り付けてください:

alias open='xdg-open '

次に、シェルまたはsource ~/.bashrcを閉じて再起動します。

これで、そのコマンドで任意のファイルを開くことができます... .pngから.jpg、.docx、.pdf、.txtへ。

2
user346995