bashスクリプト内からファイルを開くにはどうすればよいですか?


22

わかりましたので、実行gedit myfile.txtはうまく動作します。しかし、ファイルタイプにリンクされたデフォルトのデスクトップアプリを使用して、bashスクリプト内からファイルを開くのはどうでしょうか?

私は以下を試しましたが、ターミナルで手動で実行するとうまくいきますが、bashファイルに入れても何も起こりません:

#!/bin/bash
xdg-open "myfile.txt"&

代わりに何をすべきですか?

ターミナルを閉じた後もファイルを開いたままにしておく必要があることに注意してください。


1
ファイルのパスを入力してみてください。引用符で囲む必要がありますか?引用符なしで試してください
-abhishek

7
コマンドは何もしませんか?リストした内容でスクリプトを作成したところ、リストgeditされたファイルで開きます(または既存のセッションで新しいタブを開きます)。ただし、プログラムが終了するまでブロックするのではなく、すぐに戻ります。
ジェームズ・ヘンストリッジ

3
さらに、端末からスクリプトを実行すると、どのようなエラーが発生しますか?
Takkat

うん。スクリプトではファイルへのフルパスを使用していますが、明確にするためにここでは削除しました。引用符の有無にかかわらず違いはありません。私は試してみxtg-openました*.txt*.htmlそしてもっと-ただうまくいきません。
産業

5
@abhishek:そのような状況で引用符が有害な場合はありません。また、引用符を省略すると問題が発生する場合が多いです。特別な理由がない限り、不要な場合でも、すべての文字列を常に引用する習慣を付けることをお勧めします。
スコットセベランス

回答:


16

スクリプトは機能するはずです。しかし、もう少し情報を得るために何かを追加するかもしれません:

#!/bin/bash
T=`xdg-mime query filetype $1`
echo "opening file "  $1  " of type " $T "with " `xdg-mime query default $T`
xdg-open $1
echo "finished script"

このような端末(my_open.sh)を次のような端末で実行する場合:

my_open.sh path/to/somefile.txt

次の出力が得られます。

opening file  path/to/somefile.txt  of type  text/plain with  gedit.desktop
finished script

これにより、ファイルへのパスは問題なく、mimetypeが認識され、ファイルを開くために使用されるdesktopfileも問題ないことがわかります。そして、問題のファイルでgeditが開きます。

今、別のファイルで実行すると:

my_open.sh path/to/README

次の出力が得られます。

opening file  path/to/README  of type  text/x-readme with
finished script

異なるmimetypeと不足しているデスクトップファイルに注意してください。それでも、xdg-openはすべてのテキストファイル(gedit)のデフォルトを開きます。

したがって、このようなものをスクリプトに追加して、予期しない出力が得られるかどうかを確認することをお勧めします(その後、質問に追加できます)。


finished script最終的に騒々しいものを除いて、罰金。沈黙のルールである[ catb.org/~esr/writings/taoup/html/](Unixプログラミングの技術)をお勧めします。Btw .:バックティックは非推奨です-代わりに$(...)を使用してください。これはネスト可能です。
ユーザー不明

2
さて、スクリプトは追加情報を提供するためのものです。「完成したスクリプト」によって提供される情報は、nohupまたはは必要ないということです&が、それxdg-openは戻って続行できます。
xubuntix

それがプロンプトの意味です。
ユーザー不明

3
本当。そのようにするともっと明白になると思っただけです。それはより多くないので、実際に、全体のスクリプトは、必要とされていないxdg-open...まだないので、これはとにかく生産品質のスクリプトではありません
xubuntix

5

bashスクリプトtest.shを次のように作成します。

#!/bin/bash
gedit myfile.txt

次に、スクリプトを次のように実行可能にします。

chmod +x test.sh

最後に、スクリプトを次のように実行します。

./test.sh

回答ありがとうございます。しかし、残念ながら上記のようにファイルのGNOMEのデフォルトのファイルエディターを開く必要があります。
産業用

3

xdg-openではなくgnome-openかもしれません


私は、このソリューションは最高の仕事を見つける
ジョン

ユーザーがGnomeを使用していない場合はどうなりますか?
ゴダード

2

あなたは正しい方向に進んでいます。ターミナルウィンドウを閉じてもGUIアプリを開いたままにする場合nohupは、行の先頭にを追加するだけです。

#!/bin/bash
nohup xdg-open "myfile.txt"&

おそらくDISPLAY起動しようとしているシェルに環境変数が設定されていないために、guiアプリが開かない場合。エコーしてみてください$DISPLAY


3
xdg-openは必要ありnohupません&
xubuntix

0

質問の最初の部分

コマンドcatを使用すると、ターミナル内でファイルを開くことができます(必要な場合)(質問の最初の部分に記載されています)。

それを使用するには、単にタイプできますcat FILENAME

その他の情報

さらにコマンドが必要な場合: ここにコマンドの良いリストがあります。

GNOMEデフォルトエディター

GNOMEのデフォルトのアプリケーションでファイルを開きたい場合gedit

それを使用するには、単に入力します gedit FILENAME


それはGNOMEのデフォルトのエディタの端末でファイルを開きますが、ではない
産業

@industrialは私の答えを編集しました。
アルヴァ

残念ながら、オープン文句を言わない作業のいずれか...
産業

@Industrial何を求めていますか?さらに質問を説明してください!あなたはいくつかの異なることを言って、私はそれらの1つに答えましたが、あなたはそれを使いたくないと言います
...-Alvar

@Industrial GNOMEのデフォルトのテキストエディター gedit別名「テキストエディター」です。そのため、実行gedit file.filetypeすると、必要に応じてファイルが開きます。
アルヴァ

0

ここで実際に何が達成されるのかわかりませんが、単一のスクリプトでデフォルトのアプリで任意のファイルを開くか、アプリがこれをサポートする範囲であるという最近のコメントに基づいています

もしそうなら、それを行う最も簡単な方法は、ターミナルを開いてscriptname / path / to / filenameに行くか、またはpathにスペースがあればscriptname '/ path / to / filename'

cd; mkdir -p bin && gedit ~/bin/openit1

これをスクリプトとして使用します。スクリプトに任意の名前を使用できます。例としてopenit1を使用します。〜/ binから直接スクリプトを使用して名前に番号を追加するのが最善で、既存のLinuxコマンドと競合しない

#!/bin/bash
xdg-open "$1"

geditを閉じて、ターミナルで

chmod u+x ~/bin/openit1

再起動して〜/ binを$ PATHに追加します

ターミナルを開いて起動するには

openit1 /path/to/filename or openit1 'path/to/filename' 

origが述べたようにorigを使用する場合 スクリプトごと1つの特定のファイルのスクリプトとdによる呼び出し。「ターミナルで実行」ではなく「実行」を選択する必要があるスクリプトを左クリックします。


Restart to add ~/bin to your $PATH-うーん、古いWindowsの習慣ですか?;)
ユーザー不明
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.