1. ホーム
  2. bash

[解決済み] su を使って、そのユーザとして残りの bash スクリプトを実行するにはどうすればよいですか?

2022-04-26 03:32:05

質問

ユーザー名とプロジェクトを連結した文字列を引数として受け取るスクリプトを書きました。このスクリプトは、ユーザー名にスイッチ(su)して、プロジェクト文字列に基づいて特定のディレクトリにcdすることになっています。

基本的にやりたいのは

su $USERNAME;  
cd /home/$USERNAME/$PROJECT;  
svn update;  

問題は、一度suをすると...そこで待っているだけになってしまうことです。これは、実行の流れがユーザーへの切り替えに移行しているので、理にかなっています。一度終了すると、残りのものは実行されますが、希望通りには動きません。

svnコマンドの前にsuを付けましたが、コマンドは失敗しました(つまり、希望するディレクトリのsvnを更新しませんでした)。

ユーザーを切り替えて svn を起動するスクリプトはどのように書けばよいでしょうか(中略)。

どのように解決するのですか?

su"の代わりに、"sudo"を使用するのがコツです。

これを追加する必要があるかもしれません

username1 ALL=(username2) NOPASSWD: /path/to/svn

を /etc/sudoers ファイルに追加します。

に変更し、スクリプトを変更します。

sudo -u username2 -H sh -c "cd /home/$USERNAME/$PROJECT; svn update" 

ここで、username2 は SVN コマンドを実行するユーザ、username1 はスクリプトを実行するユーザです。

このスクリプトを複数のユーザーで実行する必要がある場合は %groupname の代わりに、ユーザー名1