「sudo」が存在しないと考えながらコマンドを実行します。

「sudo」が存在しないと考えながらコマンドを実行します。

yay私は権限を高めるために(archlinuxの)プログラムを使用しますsudo。ただし、見つからないsudo場合に切り替えます。これは私のユーザーがsudoerではなくインストールされているので(実行中にインストールする必要がある他のプログラムがsuあるため)私が望むものです。ルートとして、私はこれが愚かなことであることを知っています。)sudosudo

今問題は、このプログラム( )が存在しないとyay思うようにしながら、どのように実行できるかということです。sudo

ソースからパッケージをビルドしてインストールするのは、yayパッケージマネージャ(AURヘルパー)です。セキュリティ上の理由から、これらのビルドはrootとしては実行できません。これは十分に公平です。

そしてすでに質問しました。ここリポジトリにありますが、yay問題が解決されている間に代替ソリューションを使用したいと思います。

答え1

私が考えることができる唯一の回避策は、yayrootで起動してsudo開始する前に一時的に削除するラッパースクリプトを使用することですyay

#!/bin/sh

su -c "mv /sbin/sudo /sbin/sudo.old" && yay "$@"
su -c "mv /sbin/sudo.old /sbin/sudo"

ただし、これを行うには、ルートパスワードを2回入力する必要があります。別のオプションは、root でスクリプトを実行した後、次をsu使用してスクリプト内から別のユーザーに切り替えることです。

#!/bin/sh

normalUser="$1"
shift

mv /sbin/sudo /sbin/sudo.old &&
su -c "yay $@" $normalUser
mv /sbin/sudo.old /sbin/sudo

その後、次のように実行できます。

su -c "/path/to/yay.wrapper.sh adrin $yayArguments" 

あなたの場合は実際には使用しないので安全でなければなりません。ただし、問題が発生した場合は簡単に検索できるようにsudoコピーを作成します。/sbin/sudo

答え2

この問題を回避する最も簡単な方法は、この--sudo=suオプションを使用することです。

長すぎます。-yay --sudo=su -Syu希望の効果を得るには実行するだけです。

yay --sudo=su期待どおりに機能しない理由は次のとおりです。


yay問題は、CLIパラメーターの処理方法が原因で発生します。ドキュメントから:

If no arguments are provided 'yay -Syu' will be performed.

If no operation is selected -Y will be assumed.

引数が指定されていない場合yay -Syu(システム全体の更新)は実行されますが、引数として計算される--sudo=suため、yayはタスクを選択します-Y(クエリに一致するパッケージを一覧表示します。この場合は空であるため、コマンドはすぐに終了します)。

担当するコードスニペットは次のとおりです。https://github.com/Jguer/yay/blob/next/pkg/settings/parser/parser.go#L618

関連情報