【发布时间】:2015-02-27 06:25:43
【问题描述】:
我正在尝试在 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."
现在这里的问题是我的输出没有打印回显语句并且还显示警告:
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: 也欢迎使用其他方式或想法来编写此脚本
谢谢
【问题讨论】:
-
就像错误消息说的那样,你使用了
EOD,你认为你有EOF。您在转录代码时似乎已经纠正了这个错误——也许下次,使用复制+粘贴来确保您确实向我们展示了您的确切代码。 -
交换
&>>path/to/logfile.log和<< EOF。 -
但我认为您的解决方法尝试不会奏效——标准输入也会收到此处的文档。
-
关闭
EOF后还有空格吗?它应该是该行中唯一的单词,没有前导或尾随空格。 -
@tripleee 感谢您提供更贴切的标题 :)