sudo 以下の変数からコマンドを実行します。

sudo 以下の変数からコマンドを実行します。

別のユーザーとしてコマンドを実行するスクリプトを作成しようとしています。しかし、私自身の.bashrc設定コンテキスト内です。私はこのスクリプトを私たちのチーム全体に適用したいと思います。

これはsudoから.bashrcファイルをインポートしようとします。

homedir=$(echo ~)
cmd="source $homedir/.bashrc; <SOME COMMAND>"
sudo -u <other_user> bash -c $cmd

エラーが発生します。

<my_home_dir>/.bashrc: line 0: source: filename argument required
source: usage: source filename [arguments]

ただし、ソースコマンドを変数に保存せずに直接指定すると、$cmdエラーは発生しません。つまり、次のコードスニペットは完全に機能します。

sudo -u <other_user> bash -c 'source <my_home_dir>/.bashrc; <SOME COMMAND>'

問題の源は何ですか?各チームメンバーが自分のホームディレクトリを指定しなくてもスクリプトを汎用にできますか?

(ユーザー名とホームディレクトリは意図的に難読化されました)

答え1

変数を適切に使用するには、代わりに使用することをお勧めします"${cmd}"$cmdこれが""まさに皆さんが逃しているのです。 bash自体に--rcfile引数を使用すると、全体的な努力をよりエレガントに解決できます。

関連情報