首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在ssh上运行Bash脚本

在ssh上运行Bash脚本
EN

Stack Overflow用户
提问于 2010-03-04 03:24:26
回答 4查看 21.3K关注 0票数 21

我正在尝试编写一个Bash脚本,它将通过SSH连接到一台计算机并创建一个目录。长期目标有点复杂,但现在我从简单开始。然而,尽管它很简单,但我似乎不太明白。下面是我的代码:

代码语言:javascript
复制
#!/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

它运行时没有任何显式错误。但是,回显的$NOW和$BACKUP变量显示为空,并且不会创建/backup目录。我该如何解决这个问题?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2010-03-04 03:40:56

本地主机上的外壳程序正在对$NOW和$BACKUP进行变量替换,因为"EOI“没有转义。替换

代码语言:javascript
复制
 ssh tunneluser@111.222.333.444 <<EOI

使用

代码语言:javascript
复制
 ssh tunneluser@111.222.333.444 <<\EOI
票数 29
EN

Stack Overflow用户

发布于 2010-03-04 03:45:54

这些变量正在本地计算机上的脚本中进行计算。你需要用转义的美元符号来代替美元符号。

代码语言:javascript
复制
#!/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
票数 20
EN

Stack Overflow用户

发布于 2010-03-04 03:38:58

您的脚本在发送之前正在本地主机上执行替换。

将第一行更改为:

代码语言:javascript
复制
ssh -T tunneluser@111.222.333.444 <<'EOI'

这将导致在您的远程主机上发送并解释原始脚本。

如果您希望使用混合命令(例如,如果您希望在本地主机上执行date命令,则应保留ssh行不变,并将单个命令引起来):

代码语言:javascript
复制
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
票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2374276

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档