を試してみて、そしてsu
への引数は、シェルへの引数として渡されます。 ...それがすべてだ...だから
su - jetty sh ./runprogram.sh
/bin/sh
*arguments_to_su*
を、それは別のユーザ(「実効ユーザID」)としてそれをしない:
su
本質的にやっている:
含意は、単純に、これはあります
は
(become the user jetty via login or su)
/bin/sh sh ./runprogram.sh
に似ている...とsu
によって呼び出された最初の/bin/sh
は、プログラム0123を実行しようとしているので、シェルは、エラーを報告しますをシェルスクリプトとして使用し、./runprogram.sh
を引数として使用します。しかし、sh自体はシェルスクリプトではなく、バイナリです(その仕事はシェルスクリプトを実行することです)。あなたは、単にこれを実行した場合
:
su - jetty ./runprogram.sh
はその後
su
コマンドが有効なユーザーIDとして、引数としてプログラム
./runprogram.sh
、および桟橋で
/bin/sh
を呼び出しますし、すべてがうまくなければなりません。 ...
su -
を実行しているので、シェルをログインシェルにしてユーザのホームディレクトリに変更しているので、うまくいくべきです(SHOULD)。
runprogram.sh
がホームディレクトリにない場合は、エラーが発生します。再び、
su
変更実効ユーザIDの後に、それはこれをしようと桟橋ために、ので...
su - jetty cp file1 file2
を::
これは単にでcp
のコマンドを実行し、たとえば実行することはできません、また、なぜある
/bin/sh cp file1 file2
...およびcp
はシェルスクリプトではありません。しかし、この場合は-c
オプションが機能します。あなたがsu
を言っているので、あなたは、シェルに-cオプションを指定して/bin/sh
を実行したいこと:
su - jetty -c "cp file1 file2"
が仕事をしていません。文字列全体がシェルに渡されるので、次の引数は無視されるので、コマンドを引用する必要があることに注意してください。
最後に、以前のポスターの回答はLinuxでは私にとってはうまくいきませんでした。コマンド文字列全体を引用する必要があります。
スクリプトの絶対パスを指定するとどうなりますか? su - jetty sh /where/ever/runProgram.sh – aaberg