0

予期しない動作をしている単純なスクリプトがあります。

path='/usr/local/bin/new_script'

content='#!/bin/bash\nls'

sudo echo -e "$content" > "$path"

エラーが発生します:

bash: /usr/local/bin/new_script: Permission denied

私は何を間違っていますか?

4

4 に答える 4

3

ファイル/usr/ local / bin/new_scriptまたはディレクトリ/usr/ local/binへの書き込みアクセス権がありません

sudoを使用してechoコマンドを実行しても、echoはstdoutが指すファイルに書き込むだけなので、役に立ちません。問題は、リダイレクトしようとしているファイルがシェルによって開かれ、通常のユーザーとして実行されていることです。

解決策は、ファイルを開いて書き込むプロセスがrootとして実行されることを確認することです。例:

echo -e "$content" | sudo dd of="$file"

これにより、「dd」がrootとして実行され、シェルの代わりに書き込み用にファイルが開かれます。

于 2012-07-23T17:25:09.387 に答える
3

次の方法でリダイレクトできます。

sudo sh -c "echo -e '$content' > $path"
于 2012-07-23T17:38:35.460 に答える
2

リダイレクトは、rootとしてではなく、現在のユーザーによって処理されます。したがって、現在のユーザーが$ pathへの書き込み権限を持っていない限り、リダイレクトは失敗する可能性があります。

teeでこの制限を回避できます。例えば:

# echo as current user; tee as root
echo -e "$content" | sudo tee "$path"
于 2012-07-23T17:24:32.093 に答える
0

に書き込む権限がない可能性があります/usr/local/bin/。sudoを使用していますが、ファイルリダイレクト(>)は、sudoされたsudoコマンド(echo)ではなく、の出力に適用されています。したがって、リダイレクトの特権はエスカレートされていません。

于 2012-07-23T17:25:28.450 に答える