私は以下の指示に従いました。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
このスクリプトを実行する前に、実際にインストールされていることを確認してください。
システムのパッケージマネージャを使用してインストールすることもできます(必須)expect
。tcl
手動でインストールする必要がある場合は、Expectの指示を参照してください。http://expect.sourceforge.net/。 ExpectのREADME / INSTALLファイルはTclを取得するためのいくつかの場所を指していますが、これらの場所は古いようです。ただし、ActiveStateからTclのコピーを取得できます。