Cer*_*rin 19 ssh bash scripting
我正在尝试编写一个Bash脚本,它将SSH连接到一台机器并创建一个目录.长期目标有点复杂,但现在我开始变得简单了.然而,尽管很简单,我似乎无法得到它.这是我的代码:
#!/bin/bash
ssh -T tunneluser@111.222.333.444 <<EOI
# Fix "TERM environment variable undefined" error.
TERM=dumb
export TERM
# Store todays date.
NOW=$(date +"%F")
echo $NOW
# Store backup path.
BACKUP="/backup/$NOW"
[ ! -d $BACKUP ] && mkdir -p ${BACKUP}
echo $BACKUP
exit
EOI
Run Code Online (Sandbox Code Playgroud)
它运行时没有任何明显的错误.但是,回显的$ NOW和$ BACKUP变量显示为空,并且未创建/ backup目录.我该如何解决?
Ste*_*son 29
本地主机上的shell在$ NOW和$ BACKUP上进行变量替换,因为"EOI"没有被转义.更换
ssh tunneluser@111.222.333.444 <<EOI
Run Code Online (Sandbox Code Playgroud)
同
ssh tunneluser@111.222.333.444 <<\EOI
Run Code Online (Sandbox Code Playgroud)
hba*_*bar 16
正在本地计算机上的脚本中评估变量.你需要用逃脱的美元符号代替美元符号.
#!/bin/bash
ssh -T tunneluser@111.222.333.444 <<EOI
# Fix "TERM environment variable undefined" error.
TERM=dumb
export TERM
# Store todays date.
NOW=\$(date +"%F")
echo \$NOW
# Store backup path.
BACKUP="/backup/\$NOW"
[ ! -d \$BACKUP ] && mkdir -p \${BACKUP}
echo \$BACKUP
exit
EOI
Run Code Online (Sandbox Code Playgroud)
您的脚本在发送之前正在本地主机上进行替换.
将您的第一行更改为:
ssh -T tunneluser@111.222.333.444 <<'EOI'
Run Code Online (Sandbox Code Playgroud)
这将导致原始脚本在远程主机上发送和解释.
如果你想要混合(例如,如果你想在date本地主机上执行命令,你应该保持ssh行不变并引用单个命令):
ssh -T tunneluser@111.222.333.444 <<EOI
# Execute the date command on the local machine. The assignment still
# happens on the remote machine
NOW=$(date +"%F")
# Quote your $ so that the replacement happens on the remote machine
echo \$NOW
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
20178 次 |
| 最近记录: |