Shell脚本通过替换PAM文件中的文本来更改密码策略

时间:2017-01-24 21:04:25

标签: shell scripting newline

我正在开发一个shell脚本,它将使用Ubuntu 14.04中的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 />标记。我该如何解决这个问题?

2 个答案:

答案 0 :(得分:1)

使用-e中的echo标记启用反斜线转义序列(echo上的GNU coreutils),

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

对于你的情况,应该是,

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

POSIX echo语句中,您可以直接嵌入\n个字符而不包含-e标记,

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

答案 1 :(得分:1)

基本上,您应该停止使用echo来处理您正在撰写的任何新内容。

虽然POSIX描述了echo的行为,但实际上它并不像它可能的那样便携。 echo的POSIX文档甚至建议&#34; 鼓励新应用程序使用printf而不是echo。&#34;

您还可以找到对此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'