sudoソース:コマンドが見つかりません

sudoソース:コマンドが見つかりません

このプログラムをrootとして実行したいです。仮想環境を有効にし、その仮想環境でPythonプログラムを実行します。

プログラムは次のとおりです

$cat myfile.sh
source /pathto/venv/bin/activate
python /pathto/rsseater.py

ただルートで実行すると

$ sudo ./myfile.sh 
./myfile.sh: 2: ./myfile.sh: source: not found

私が見つけたこれsudo -sしかし、ファイルの先頭に追加しようとすると、プロンプトが# - に変わるようですが、Pythonは期待どおりに実行されません。ファイルの上部にsudo -sがあると、プログラムが何をしているのかわかりません。

このプログラムをrootとして実行するにはどうすればよいですか?

答え1

通常、次のようにスクリプトの上部にインタプリタの呼び出しを追加しようとします。

$cat myfile.sh
#!/bin/bash

source /pathto/venv/bin/activate
python /pathto/rsseater.py

これはあなたが持っているものと非常に似ているようですが、実際には非常に異なります。あなたのシナリオでは、実行時に呼び出されるシェルでコマンドを実行しようとしていますsudo。上記の例では、#!/bin/bash呼び出し行の後にさまざまなコマンドが続く別々のBashシェルが作成されます。#!/bin/bash新しいBashシェルが分岐するようにします。

通訳者とシェバン

命名法は#!shebangと呼ばれます。あなたはできますこのサイトのさまざまなQ&Aで詳細をご覧ください。また、薬ウィキペディア。ただし、つまり、指定されたファイルが「実行」(別名実行)されると、最初にプログラム(インタプリタ)がディスクからロードされ、次にプログラムの操作がファイルの内容を解析することがシステムに通知されます。処刑されたばかりです。

メモ:基本的にshebangラインの後のすべて。

通訳

インタプリタは、一度に1つのコマンドでファイルを処理できるプログラムです。この例では、Bashシェルをインタプリタとして使用します。ただし、ここでは、C シェルや Korne シェルなどの他のシェルを使用することもできます。

Perl、Ruby、Pythonなどの高レベルインタプリタを同じ方法で使用することもできます。

「sudo -s」を使用するとエラーが発生するのはなぜですか?

マニュアルページを見ると、sudo次のように表示されます-s

 -s [command]
            The -s (shell) option runs the shell specified by the SHELL 
            environment variable if it is set or the shell as specified in 
            the password database.  If a command is specified, it is passed
            to the shell for execution via the shell's -c option.  If no 
            command is specified, an interactive shell is executed.

したがって、このコマンドを実行すると、次のようになります。

$ sudo -s ./myfile.sh

次のようなことが発生します。

$ /bin/sh
sh-4.2$ source somesource.bash 
sh: source: somesource.bash: file not found

シェルは/bin/shこのコマンドをサポートしていませんsource

関連情報