首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用ssh远程执行命令时转义特殊字符

使用ssh远程执行命令时转义特殊字符
EN

Stack Overflow用户
提问于 2022-04-01 17:45:14
回答 1查看 68关注 0票数 0

当远程服务器上的ran命令在本地运行时,输出将按预期工作:

代码语言:javascript
运行
复制
desired_kernel_version="5.4.0-105-generic"

cat /tmp/grb.bkp | grep GRUB_DEFAULT
GRUB_DEFAULT=0

kernel_position=$(awk -F\' '$1=="menuentry " || $1=="submenu " {print i++ " : " $2}; /\tmenuentry / {print "\t" i-1">"j++ " : " $2};' /boot/grub/grub.cfg | grep "${desired_kernel_version}" | grep -v recovery | awk '{ print $1}' | sed 's/ //g')

echo $k_position
1>2

sed -i "s/GRUB_DEFAULT=0/GRUB_DEFAULT=\"${k_position}\"/g" /tmp/grb.bkp

cat /tmp/grb.bkp | grep GRUB_DEFAULT
GRUB_DEFAULT="1>2"

从远程服务器运行时所需的输出:将GRUB_DEFAULT值的0替换为引号中的kernel_position。

代码语言:javascript
运行
复制
server=abcd

kernel_position=$(ssh -qT $server awk -F\' '$1=="menuentry " || $1=="submenu " {print i++ " : " $2}; /\tmenuentry / {print "\t" i-1">"j++ " : " $2};' /boot/grub/grub.cfg | grep "${desired_kernel_version}" | grep -v recovery | awk '{ print $1}' | sed 's/ //g')

ssh -qT $server "sed -i "s/GRUB_DEFAULT=0/GRUB_DEFAULT=\"${k_position}\"/g" /tmp/grb.bkp"
EN

回答 1

Stack Overflow用户

发布于 2022-04-01 19:24:50

建议不要引用地狱的话。

通过编写包含所有行的脚本ssh,将muli行命令发送到remote-script.sh中。

remote-script.sh

代码语言:javascript
运行
复制
#!/bin/bash
source ~/.bash_profile
$k_position=$1
desired_kernel_version="5.4.0-105-generic"

cat /tmp/grb.bkp | grep GRUB_DEFAULT
GRUB_DEFAULT=0

kernel_position=$(awk -F\' '$1=="menuentry " || $1=="submenu " {print i++ " : " $2}; /\tmenuentry / {print "\t" i-1">"j++ " : " $2};' /boot/grub/grub.cfg | grep "${desired_kernel_version}" | grep -v recovery | awk '{ print $1}' | sed 's/ //g')

echo $k_position
1>2

sed -i "s/GRUB_DEFAULT=0/GRUB_DEFAULT=\"${k_position}\"/g" /tmp/grb.bkp

cat /tmp/grb.bkp | grep GRUB_DEFAULT
GRUB_DEFAULT="1>2"

remote-script.sh上授予当前用户执行权限

代码语言:javascript
运行
复制
chmod u+x remote-script.sh

使用scp命令将remote-script.sh复制到$server。如果可能的话,只在部署时进行一次。

代码语言:javascript
运行
复制
scp -q remote-script.sh $server:/home/your-user

使用ssh命令在远程服务器上运行remote-script.sh。在命令行中传递$k_position

代码语言:javascript
运行
复制
ssh -qT $server "bash -c /home/your-user/remote-script.sh $k_position"

顺便说一句,在计算kernel_position时,建议将所有awkgrepsed命令折叠成一个awk脚本。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71710917

复制
相关文章

相似问题

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