我正在尝试在 Linux 中编写一个非常简单的 shell 脚本。我尝试实现的场景是:
创建用户帐户并在内部为其设置密码(此操作不允许与用户交互)。成功后,只向用户显示成功消息。其余内容均不应显示。
在 RHEL 上,这变得非常简单,因为 passwd 命令接受 --stdin 选项,这有助于我通过管道传递输入。并且我将标准输出重定向到日志文件中。[不分享该代码,因为它有点简单,并且针对 StackExcahnge 上的不同问题多次解释过。]
但是,Ubuntu 不接受 passwd 的 --stdin 选项,因此我不得不使用以下方法:
#!/bin/bash
useradd -m demo &>path/to/logfile.log
passwd demo &>>path/to/logfile.log << EOF
myPasswd
myPasswd
EOF
echo "User demo successfully added to the system."
现在的问题是我的输出没有打印 echo 语句并且还显示警告:
root@ubuntu:~# ./usercreate.sh
./usercreate.sh: line 8: warning: here-document at line 3 delimited by end-of-file (wanted `EOF')
root@ubuntu:~#
而不是我预期的:
root@ubuntu:~# ./usercreate.sh
User demo successfully added to the system.
root@ubuntu:~#
请帮我解决以下两件事:
- 有没有办法只抑制该脚本的警告?
- 为什么它不打印我的 echo 语句以及我该如何打印它?
PS:也欢迎以其他方式或想法来编写此脚本
谢谢
答案1
使用 HEREDOC 分隔符时,不应有任何滞后或尾随空格,并且分隔符应该是行上的唯一单词。在这个例子中,我在 EOF 后有一个空格,这是导致所有问题的原因。删除滞后空格后,脚本可以按预期运行!!
此答案归功于 StackOverflow 上的用户 Carlos Campderrós。在此分享他对我的问题的回答