アプリケーションでファイルを開くための「open」コマンド

アプリケーションでファイルを開くための「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

答え1

OS Xの主な目的openこのコマンドは、リンクされたアプリケーションでファイルを開きます。最新の OSX ではなく unice に対応する内容は次のとおりです。xdg-open

xdg-open index.html

xdg-openopen -a特定のアプリケーションでファイルを開くのに対応するOSXはありません。これは、アプリケーションでファイルを開く一般的な方法は、単にアプリケーション名を入力してからファイル名を入力することです。より正確には、アプリケーションを実装するランチャーの名前を入力する必要があります。

sublime_text index.html

Linux、他のUnixシステムと同様に(しかし、私が知っている限り、OS Xの非Unixy部分ではありません)パッケージマネージャ追跡ソフトウェアを使用してソフトウェアを管理し、個々のファイルを使用する場所に配置します。。たとえば、すべてのランチャーは小さなディレクトリセットにあり、これらのディレクトリはすべて次のディレクトリに一覧表示されます。PATH変える;ランタイムは、にリストされているディレクトリからsublime_text呼び出されたファイルを探します。 OS Xでは、単一のディレクトリツリーに解凍され、アプリケーションデータベースに登録されているアプリケーションを処理するために追加のレベルの間接参照が必要です。 Linuxにはアプリケーションデータベースはありませんが、不要な方法で構成されています。sublime_textPATHopen -a

コマンドsublime_textシェルの実行が機能しない場合は、Sublime Textが正しくインストールされていません。私はそれを試したことがなく、配布パッケージ(debやrpmなど)ではなくtarアーカイブとして提供されているので、追加のインストール手順を実行する必要があるかもしれません。これを自動化することは、実際にはSublime Textクリエイターの使命ですが、まだ自動化していない場合は、次のコマンドを実行して直接実行できます。

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

もちろん、実行可能ファイルのあるパスに置き換えてください。sublime_text

発生したコマンドはopen古い名前です。openvtコマンド(一部のLinuxディストリビューションでは名前にのみ含まれていますopenvt)。このopenvtコマンドは新しい仮想コンソール、これはrootとしてのみ実行でき、ほとんどの人がグラフィックウィンドウ環境でのみ作業するため、今世紀には頻繁に使用されません。

答え2

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

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

私は実行可能ファイルを引数として要求せずにプログラムに関連付けられており、そのプログラムを使用してファイルを開くファイルを意味するものと比較してを意味すると仮定xdg-openします。openvtファイルとURLをパラメータとして渡すことができます。

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

答え3

人々はしばしばこれをxdg-openエミュレーション機能と呼んでいますが、openmacOSはopen1. stdout / stedrrから何もリダイレクトせずに2.ターミナルで実行したいものを切り離すという点で少し異なります(ほとんどの場合、ユーザーがやっていること)。 GUIを起動するときに必要なもの)アプリケーションを使用すると端末がありません)

この問題を解決するために、いくつかの標準GNUツールを使用して適切な対応するツールを考えました(構文はFishシェルですが、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
}

答え4

毎日使用する私のソリューションはaliasfor xdg-open

これを次の項目に入れてください~/.bashrc

alias open='xdg-open '

その後、シェルを閉じて再起動するか、source ~/.bashrc

このコマンドを使用して、.pngから.jpg、.docx、.pdf、.txtまですべてのファイルを開くことができます。

関連情報