スクリプトで sudo 操作後に新しいユーザーのエイリアスを追加する

スクリプトで sudo 操作後に新しいユーザーのエイリアスを追加する

私は以下の指示に従いました。https://stackoverflow.com/questions/2135644/how-can-i-define-a-bash-alias-as-a-sequence-of-multiple-commands私自身のbashスクリプトを作成します。次のように:

sudo -u otheruser -i
alias cd1="cd /dir/one/"
alias cd2="cd /dir/two/"

私はこれらのエイリアスを使用できるようにしたいですotheruser。私の目標は実行可能ファイルとして実行することですが、テストのためのソースを提供しています(問題を避けるため)。https://stackoverflow.com/questions/2197461/how-to-set-an-alias-inside-a-bash-shell-script-so-that-is-it-visible-from-the-ou)良いsource ./myscript

これを実行してもsudoは機能しますが、次のエイリアスは機能しません(の場合otheruser)。新しいユーザーではなく、このコマンドを呼び出すユーザーにエイリアスを適用する必要があると思いますか?それとも、他のユーザーにsudoを実行した後にスクリプトのコマンドを無視するルールはありますか?

ベストアンサー1

うまくいかないと思うのは、これら2つのaliasコマンドがbashセッションの開始sudo後に実行されるためです。これをテストすることができます - スクリプトソースを取得し、新しいセッションの開始時に押したままにしてから、元のシェル Ctrlタイプdから:

$ type cd1
cd1 is aliased to `cd /dir/one/'
$ type cd2
cd2 is aliased to `cd /dir/two/'

私はあなたが望むものを得ることができますexpectスクリプトですが、私はこれについての専門家ではないので、批判を歓迎します。

#!/usr/bin/expect -f

spawn sudo -u otheruser -i
send "alias cd1='cd /dir/one/'"
send "\n"
send "alias cd2='cd /dir/two/'"
send "\n"

interact

expectこのスクリプトを実行する前に、実際にインストールされていることを確認してください。

システムのパッケージマネージャを使用してインストールすることもできます(必須)expecttcl手動でインストールする必要がある場合は、Expectの指示を参照してください。http://expect.sourceforge.net/。 ExpectのREADME / INSTALLファイルはTclを取得するためのいくつかの場所を指していますが、これらの場所は古いようです。ただし、ActiveStateからTclのコピーを取得できます。

おすすめ記事