シェルの「管理者権限を持つ」AppleScriptに相当

2
2022.01.10

最近、Macbookにいくつかの変更を加える必要があり、sudo権限だけでなくroot権限も必要になりました。これを行う方法を検索したとき、私にとって最も適切と思われる答えは、実行したいシェルスクリプトの後に「管理者権限付き」を使用してAppleScriptでroot権限で実行する必要のあるコマンドを実行することでした。これで必要なことは達成されましたが、一般的に、シェルでいくつかのコマンドを実行する場合は、AppleScriptを使用する必要はありません。

したがって、「管理者権限を持つ」のシェルバージョンが私のMacでどのように機能するのか疑問に思いました。 sudo権限だけでなくroot権限も提供してくれるものを探しています。これを「sh互換」の方法で実行できれば、zsh、bashなどで機能するので、私はそれを好みます。ただし、zsh(選択したインタラクティブシェル)でのみ機能するソリューションも受け入れます。私にとって良い「sh互換」ソリューションがない場合。

新しいターミナルウィンドウでシェルスクリプトを開き、管理者権限で実行する方法で提供されているソリューションと同様の方法でosascriptを使用して、ターミナルでAppleScriptを実行できることを理解していますが、より「純粋な」ソリューションを望んでいました。もし可能なら。

回答
1
2022.01.10

sudo、AppleScriptのwith administrator privilegesに相当するコマンドラインです。つまり、あなたがsudo somecommandを実行すると、その後、somecommandはrootとして実行されます。簡単なデモは次のとおりです。

 $ sudo whoami
Password: [I entered my password here]
root

ただし、注意しなければならないことの1つは、 sudoは実際のコマンドをrootとしてのみ実行し、リダイレクトなどは実行しないということです。したがって、次のようなものを使用する場合:

 sudo somecommand <inputfile >outputfile

...開口部inputfileoutputfilesudoと、コマンドの実行前に、現在のユーザーとして、あなたの現在のシェルによって行われます。ルートシェルを実行してリダイレクトを実行し、コマンドを実行するなど、これを回避する標準的な方法があります。

 sudo sh -c 'somecommand <inputfile >outputfile'

(警告:実行するコマンドに一重引用符やシェル変数が含まれている場合、状況はより複雑になります。)もう1つの標準的なトリックは、 sudo catを使用してファイルをrootとして読み取るか、 sudo teeを使用してファイルをrootとして書き込むことです。

 sudo cat inputfile | somecommand | sudo tee outputfile >/dev/null

(この例では、 catteeはrootとして実行されますが、somecommandは通常のユーザーとして実行されることに注意してください。)

また、sudo -sを使用してインタラクティブなルートシェルを開き、ルートとして一連のコマンドを実行することもできます(exitを使用してそのシェルを閉じ、通常に戻ります)。ただし、rootとして実行する場合は注意してください。自分が何をしているのか正確にわからない場合は、完全に混乱させるのはかなり簡単です。