web-dev-qa-db-ja.com

XFCEキーボードショートカットで動作しないbashスクリプトからPythonを呼び出す

コマンドライン経由でテキストを翻訳するpythonスクリプトがあり、使用法はscript.py "Hola Mundo"で、出力はHello Worldになります。

Xubuntu 18.04.1 XFCEのキーボードショートカットを介してこのプログラムにテキストを送信したいので、bashスクリプトtranslate.shを作成し、script.pyと一緒に/usr/local/binにまとめました。 XFCEキーボードユーティリティを使用してキーボードショートカットを割り当てました。ただし、Pythonを呼び出す行を除き、bashスクリプト内のすべてが機能しました。

ターミナル経由でスクリプトを呼び出すと、問題なく動作します。私はまだbashが非常に新しく、XFCEキーボードショートカットを介してbashスクリプトを呼び出しているときに、Python(存在する場合)のエラーメッセージを出力する方法がわかりません。

誰が何が起こっているのか、何が問題なのかを知っていますか?

私のbashスクリプトtranslate.sh

#!/usr/bin/env bash

TEXT=`xsel -o`
RESULT=`python /usr/local/bin/script.py "$TEXT"`
# or RESULT=`script.py "$TEXT"` (I've put Shebang in the python script too) 
# neither worked with keyboard shortcut, both worked in terminal
echo $RESULT # for debugging in terminal

notify-send --icon=info "$TEXT" "$RESULT"

このスクリプトを端末で実行すると、すべてが機能します-通知がポップアップ表示され、端末にも結果がエコー表示されることに注意してください。このスクリプトをキーボードショートカットで呼び出すと、選択したテキストが通知タイトルとしてポップアップに表示されますが、本文はありません。 (python行のみの証明は機能しませんでした。)

PythonスクリプトのShebang行は#!/usr/bin/env pythonです。

1
jexplorer

@wjandreaのデバッグのヒントのおかげで、機能しない理由を見つけました。

使用されているPythonインタープリター/環境は、依存関係をインストールしたAnacondaバージョンではなく、/usr/bin/pythonであるため、Pythonモジュールが欠落していました。 XFCEキーボードショートカットでpythonスクリプトを呼び出しても、$PATHファイル内に設定された.bashrc変数は尊重されないようですシェルをインタラクティブに実行しない )。

解決策は、Pythonスクリプト内のShebang行で使用する正しいPythonインタープリターを指定するだけです。私のものは#!/home/jexplorer/anaconda3/bin/pythonのように見えます。


Or、あるいは、できれば、$PATHの代わりに.profileファイル内に.bashrc変数を設定してください。

0
jexplorer

根本的な原因はわかりませんが、スクリプトをデバッグするには、execを使用してすべての出力をファイルにリダイレクトできます。例えば。 exec 1> ~/output.txt 2>&1

ちなみに、バックティック``の代わりに新しい$()構文を使用し、常に小文字の変数名を使用して(誤って環境/シェル変数を上書きしないように)、常に拡張を引用する(echo "$RESULT")。

要するに:

#!/usr/bin/env bash

exec 1> ~/output.txt 2>&1  # For debugging

text="$(xsel -o)"
result="$(script.py "$text")"

echo "$result"  # For debugging in terminal
notify-send --icon=info "$text" "$result"
1
wjandrea