サーバ間でファイルをコピーするスクリプトがあります。私はlsofコマンドを使用して、ファイルが移動される前に書き込まれていないことを確認しています。スクリプトを実行しているユーザーとファイルに書き込んでいるユーザーが違うので、ファイルの所有者にsudoする必要があります。ここでsudoersファイルの該当する行です:sudoコマンドを含むスクリプトでソースを使用する
userA ALL=(userB:userB) NOPASSWD: ALL
メインスクリプトでは、(ユーザAとして走った)、私はsudoのに呼び出して試してみましたが、その後のlsofコマンドを含む添字:
sudo su - userB -c 'source ./getOpenFiles.sh'
getOpenFiles.sh
:私も添字を呼び出して試してみました#!/bin/bash
lsofResult=$(/usr/sbin/lsof "${sourcePath}")
:この1行を持っています
#!/bin/bash
sudo su - banjobs
lsofResult=$(/usr/sbin/lsof "${sourcePath}")`.
どちらのソリューションが動作している:210
は、その後の添え字のsudoことの最初の行を持っています。
'sudo su - banjobs'を実行すると、' sudo su'が終了して終了するまで次のコマンドは実行されず、残ったものは 'banjobs'として実行されません。 –
つまり、 'lsofResult'を' banjobs'として評価しません。 –
... 'su -c 'source somescript''を使用すると、' somescript'はそのシバンが何を言っていても 'bash'ではなく' sh'によって実行されます。あなたの 'sh 'が' source'をサポートしていなければ、それはまったく動かない。 (POSIX互換の 'source'を書く方法は' source somescript'ではなく 'somescript'です)。 –