2017-01-24 5 views
2

私はUbuntu 14.04のPAMファイルを使用してパスワードポリシーを完全に変更するシェルスクリプトを作成しています。私はこれをやっている方法は、PAMファイルのテキストを置き換えることによってパスワードポリシーを変更するシェルスクリプト

sudo sh -c 'echo "I want to change this text" >/etc/pam.d/example.txt' 

私はに実行している問題は、私は新しい行を作成することができないということです。私はこれを研究してきた、と一部の人々は、HTMLタグが働く<br>と言うが、私は

sudo sh -c 'echo "I want to change this text. <br> This should be a new line." >/etc/pam.d/example.txt 

(と)

sudo sh -c 'echo "I want to change this text. <br /> This should be a new line." >/etc/pam.d/example.txt' 

を試みたが、それは単に上<br><br />タグを出力しますテキストファイル。これをどうやって解決するのですか?

答えて

1

基本的には、あなたが書き込んでいるものについては、echoの使用を中止する必要があります。

POSIXでは、動作がechoと記載されていますが、実際にはそれはできるだけポータブルではありません。 echoのためのPOSIXのドキュメントでも、「新しいアプリケーションがprintfの代わりに、エコーを使用することをお勧めします。」することをお勧めします

また、このhere on the S.E. networkへの参照を見つけることができます。そしてthe bash hackers' wiki touches on this too。それはone of the bash pitfallsに記載されています。

sudo sh -c 'printf "First line.\nSecond line.\n" >/etc/pam.d/example.txt' 
1

は、あなたのケースのために

sudo sh -c 'echo -e "I want to change this text\nThis should be a new line" ' 
I want to change this text 
This should be a new line 

、それがあるべき、(GNU coreutilsの一部として提供されますecho上)バックスラッシュエスケープシーケンスを有効にするためにecho-eフラグを使用し

sudo sh -c 'echo -e "I want to change this text\nThis should be a new line" > /etc/pam.d/example.txt' 

POSIX echoステートメントでは、-eフラグなしで\n文字を直接埋め込むことができます。

sudo sh -c 'echo "I want to change this text\nThis should be a new line" > /etc/pam.d/example.txt' 
+1

Heya。 'echo 'の動作は/ bin/shの実装によって異なることに注意してください。例えば、bash(いくつかのシステムではデフォルトの/ bin/sh)はダッシュ(私の古いubuntuボックスのデフォルトの/ bin/sh)とは違って動作し、OS Xでは/ bin/shというbashの組み込みエコーは/ bin/bashのものとは異なり、また/ bin/echoとは異なります。移植性が重要な場合は、エコーを全く使用しないほうが安全です。 – ghoti

関連する問題