我的 bash 代码是:
1 #!/bash/sh
2 set -e
3 USER="admin"
4 HOST="1.2.3.4"
5 PASSWORD="$(cat password.txt)"
6
7 sshpass -p"$PASSWORD" ssh -t $USER@$HOST "/usr/bin/sudo bash -c 'sudo ls 2>&1; echo \"testing\";sudo ls src 2>&1;exit;'" >> log.txt
8
9 echo "------------------------------Another Method ----------------------------------------"
10 sshpass -p"$PASSWORD" ssh -t $USER@$HOST << EOF
11 echo "....1...."
12 sudo ls 2>&1
13 echo "....2...."
14 ls src 2>&1
15 sudo echo "....3...."
16 exit
17 EOF
第 7 行可以使用 sudo 运行多个命令并将信息打印到 log.txt,第 9 行->第 17 行则不能。但我更喜欢使用第 9 行到第 17 行,因为我想要运行的命令可能包含嵌套的控制语句(例如 if-else-fi)。我不知道如何在第 7 行执行此操作。如何让第 9 行到第 17 行使用 sudo 运行多个命令并打印到本地 log.txt?
屏幕输出的部分内容为:
....1....
sudo: no tty present and no askpass program specified
sudo: pam_authenticate: User not known to the underlying authentication module
....2....
tmp
....3....
欢迎任何帮助。谢谢。
答案1
您似乎没有意识到可以>> log.txt
在第一个之后添加EOF
。
sshpass -p"$PASSWORD" ssh -t $USER@$HOST <<'EOF' >>log.txt
echo "....1...."
sudo ls 2>&1
: etc
EOF
您可以在两种变体中输入相同的命令(换行符或分号分隔),但在第一种情况下正确引用稍微困难一些(在第二种情况下则不然!虽然我在周围添加了引号'EOF'
以防止 shell 在此处的文档中插入变量等;如果您需要 shell 这样做,则需要撤消该更改)。