別のユーザーとしてコマンドを実行するスクリプトを作成しようとしています。しかし、私自身の.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引数を使用すると、全体的な努力をよりエレガントに解決できます。