pwd="123456" passwd root <<EOF $pwd $pwd EOF
我这样写,发现 EOF 中,不认我这个变量,想问下,这个在 shell 中应该怎么实现
![]() | 1 hsfzxjy 2022-03-09 18:02:24 +08:00 via Android 是可以的,有没什么报错 |
![]() | 3 xuboying 2022-03-09 18:04:59 +08:00 这个东西叫“here doc”,搜一下就有详细教程了 |
![]() | 4 thedrwu 2022-03-09 18:05:26 +08:00 via Android 认,但是 passwd 是否直接从 stdin 读或者读之前会不会 flush 又是另一个问题 |
![]() | 5 swulling 2022-03-09 18:06:42 +08:00 |
![]() | 6 swulling 2022-03-09 18:07:29 +08:00 你这个问题是 passwd ,建议这么用 echo "NEWPASSWORD" | passwd --stdin root passwd 支持从标准输入读取 |
7 bufbz 2022-03-09 18:11:44 +08:00 cat > ~/.pip/pip.conf << 'EOF' [global] index-url = http://mirrors.aliyun.com/pypi/simple [install] trusted-host=mirrors.aliyun.com EOF EOF 加单引号即可。 |
8 bufbz 2022-03-09 18:13:12 +08:00 看错了,这个是去变量,默认就是可以调用变量。 |
![]() | 9 hsfzxjy 2022-03-09 18:14:09 +08:00 via Android |
![]() | 10 haoliang 2022-03-09 19:18:19 +08:00 `yes $pwd | passwd root` |
![]() | 11 fuxkcsdn 2022-03-09 23:16:05 +08:00 #10 正解,一般需要输入密码的地方都是用 yes 命令 |
12 iqfEmhuNidBhDfWo 2022-03-09 23:26:30 +08:00 楼主这情景和我上一帖一样啊~ ①heredoc 默认就是会解释变量的 ②如果想不解释变量,可以在该字符串前加反斜杠转义,或者使用一对单引号闭合第一个 endpoint keyword (大家都习惯使用 EOF ) ③回到楼主的操作上来,不管是"</path/to/file"表示标准输入重定向自文件,还是"<<keyword"表示标准输入重定向自 heredoc ,passwd 默认都不吃这一套,所以你需要加上楼上所说得--stdin 可选项 ④另外顺便一说,楼主这需求也可以拿 expect 或者 socat 来实现 |
![]() | 13 mhycy 2022-03-10 00:01:47 +08:00 修改密码的操作有文档建议使用的命令是 chpasswd |
14 Alliot 2022-03-10 12:42:12 +08:00 passwd 有参数直接读取标准输入面交互 : ``` shell echo 'xxx' | passwd --stdin user ``` |