linux系统上shell脚本编写问题总结


需求背景:项目技术栈:Vue2+Nuxt2+TypeScript,是一个服务端渲染的项目,每次打测试包时需要在虚拟机上通过命令行打包项目,然后将打包生成的文件压缩为一个压缩包.tar.gz,然后将这个压缩包下载到本地,再由本地上传到测试服务器的指定目录下,在测试服务器上通过命令行解压文件,然后启动项目服务;

实现效果:通过虚拟机linux中的shell脚本自动打包指定git分支的前端项目代码,然后将打包生成的文件生成压缩包,并将这个压缩包推送到测试服务器指定目录下;然后在测试服务器上通过shell脚本解压对应缩包.tar.gz,并启动项目服务

1、编写shell脚本时遇到的问题:
1.1 执行.sh的shell脚本时,解压出来的文件名会自动带有问号,且这个问号在FTP工具中看不到,通过linux命令才能查看到

1.2 提示shell脚本中的\r命令未找到;如:./test.sh: line 1: $'\r': command not found

原因:因为我是通过MobaxXterm工具创建的shell文件,并且通过文本方式编写的脚本内容,存在换行的操作,这里的换行符和linux系统上的换行符存在差别,所以会提示如上的两个问题

解决方法:设置文件的格式类型为unix,或者去掉shell脚本中\r换行符;

# 方法一:设置文件的格式类型为unix
# 使用vi命令打开shell文件
vi test.sh
# 转换格式,设置文件的格式类型为Unix格式,
# 这意味着文件将使用Unix风格的换行符(LF)而不是Windows风格的换行符(CRLF)
:set ff=unix
# 保存文件
:wq

# 方法二:去掉shell脚本中\r换行符
# 去掉test.sh文件中\r换行符然后生成新文件newtest.sh
sed 's/\r//g' test.sh > newtest.sh
# 给新生成的newtest.sh文件添加可执行权限,使其可以执行
chmod +x newtest.sh

2、常用的linux命令:

  • sshpass -p 'password' scp file1 username@xxx.xxx.xx.x:/file2,       
    • 将本地的file1文件推送到远程服务器xxx.xxx.xx.x的指定目录file2下,(使用sshpass提前输入远程服务器的密码,或者使用scp推送文件的时根据提示输入远程服务器密码)
      • 参数说明:
        • username:连接远程服务器的用户名
        • xxx.xxx.xx.x:远程服务器的IP地址
        • password:连接远程服务器时该用户名对应的明文密码
    • 注意:sshpass需要根据当前linux系统进行提前安装,安装教程可参考博客:sshpass的安装与使用-CSDN博客
  • su user                                                   切换的指定的user使用的用户
  • cat /etc/*-release                                    查看当前的linux系统
  • sed 's/\r//g' test.sh > newtest.sh            去掉test.sh命令文件中\r换行符生成新文件newtest.sh
  • chmod +x newtest.sh                             给新生成的.sh文件添加可执行权限
  • cp file1 file2                                            将file1文件拷贝到file2
  • ssh-keygen -t rsa -b 4096 -C "xxxx@emspost.com.cn"
    • 在linux系统上生成对应的ssh密钥
  • cat id_rsa.pub                                        查看id_rsa.pub公钥内容,将内容复制到github仓库下
  • mv file1 file2                                           对file1文件重命名成file2
  • tar -zxvf file1.tar.gz -C file2                     将file1.tar.gz压缩包解压到file2目录下
  • ps aux | grep 进程关键字                         查找指定进程的详细信息
  • kill  pid                                                      终止指定pid号的进程

3、使用vim命令编辑文件的步骤:

1)打开终端:在Linux系统上打开一个终端窗口

2)输入命令 vim  filename,打开要编辑的文件

3)按下Enter回车键,vim将会打开该文件并显示在终端中

4)开始编辑文件:

       4.1)按下 i 键进入插入模式,可以开始输入文本内容

        4.2)在插入模式中,输入想要添加的内容,

        4.3)编辑完毕后,可以按下 Esc 键退出插入模式,返回到普通模式

5)保存并退出文件:完成编辑后,可以执行以下命令来保存更改并退出vim

        5.1)在普通模式下,输入:w并按下Enter回车键来保存文件但不退出vim

        5.2)输入:q并按下Enter回车键 来退出vim,但不保存更改内容

        5.3)输入:wq 并按下Enter回车键,保存更改并退出vim;

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/674167.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

免费API HUB行业报告

1. 行业概述 1.1 API HUB定义 API HUB,即应用程序接口中心,是一个集中管理和提供API服务的平台。它允许开发者轻松地访问和集成来自不同来源的API,从而加速开发过程并促进技术创新。 1.2 免费API HUB的特点 免费API HUB通常具有以下特点&…

免费听歌软件b端(但需要下载)

我会觉得很好用所以分享出来供大家使用。 这个事打开后的页面包括可以选择分页,和搜索等 回车可以用上面的搜索图片也可以点机 从前往后呢分别是排序,歌曲id,歌曲名称,歌手,专辑,歌曲长度,操作 …

【算法每日一练】新月轩就餐

思路: 其实很容易想到是双指针或者双端队列。 我们设置一个type表示当前区间已经有了多少种厨师,同时还需要记录区间中每个元素出现的次数,然后比较棘手的是移动问题了,什么时候移动呢? 我们可以发现当区间当队头元…

脂热控制+规律喝水+适量运动,健康减调全攻略

一、控制脂热的摄取量 肥胖大多都是因为身体摄取了多余的脂热而逐渐形成长成的,因此,控制脂热的摄取量就等于是控制了肥胖的涨幅。不了解的,按公式和例举的来就行 油脂量摄取公式:正常人每人每天油脂量摄取每公斤体重数x0.45&am…

【漏洞复现】海康威视综合安防管理平台 orgManage/v1/orgs/download 任意文件读取漏洞

0x01 产品简介 海康威视综合安防管理平台是一套“集成化”、“智能化”的平台,通过接入视频监控、一卡通、停车场、报警检测等系统的设备。海康威视集成化综合管理软件平台,可以对接入的视频监控点集中管理,实现统一部署、统一配置、统一管理和统一调度。 0x02 漏洞概述 海康…

算法学习笔记(7.4)-贪心算法(区间调度问题)

目录 ##什么是区间调度问题 ##贪心解法 ##具体的例题示例讲解 ##452. 用最少数量的箭引爆气球 - 力扣(LeetCode) ##435. 无重叠区间 - 力扣(LeetCode) ##56. 合并区间 - 力扣(LeetCode) ##什么是区间调…

【Go专家编程——语法糖】

语法糖 语法糖表示编程语言中特定类型的语法,这些语法对语言的功能没有影响,但是更方便程序员使用。 1.语法糖: 1.1 规则一:多变量复制可能会重新声明 我们知道可以使用“:”可以同时声明多个变量 field1, offset : nextField(str,0) fi…

重新安装VmWare的tools

原因: 因为一些原因,我需要重新安装VmWare tools,比如我升级到了win11,但是Vmware16.0已经不能使用,所以我升级了Vmware到16.2,这时候就需要升级VmWare tools。但是升级以后,会有一些小问题&…

MongoDB环境搭建

一.下载安装包 Download MongoDB Community Server | MongoDB 二、双击下载完成后的安装包开始安装,除了以下两个部分需要注意操作,其他直接next就行 三.可视化界面安装 下载MongoDB-compass,地址如下 MongoDB Compass Download (GUI) | M…

LabVIEW动态力传感器校准系统

LabVIEW动态力传感器校准系统 开发了一种基于LabVIEW的动态力传感器校准系统。系统主要用于动态力的测量和校准,通过高度集成化和自动化的设计,显著提升校准的效率和精确度。系统采用冲击法进行动态校准,涵盖了完整的硬件设计和软件开发流程…

SparkML

SparkML 一、介绍二、模型开发流程1、dataframe数据模型2、transformer转换器3、estimators模型学习器4、pipeline管道 三、示例:基于随机森林的新闻分类任务1、引入相关包2、初始化spark3、读取数据4、查看数据情况5、数据处理1、分词2、类别编码3、去除停用词4、b…

Python GNN图神经网络代码实战;GAT代码模版,简单套用,易于修改和提升,图注意力机制代码实战

1.GAT简介 GAT(Graph Attention Network)模型是一种用于图数据的深度学习模型,由Veličković等人在2018年提出。它通过自适应地在图中计算节点之间的注意力来学习节点之间的关系,并在节点表示中捕捉全局和局部信息。 GAT模型的核…

实现spring配置bean类机制

大家好,这里是教授.F 流程说明: 我们自己实现spring配置bean类的机制,要先了解原本是怎么实现的。 原本的机制就是有一个bean配置文件,还有一个ApplicationContext spring文件。bean类写着要扫描的文件信息,spring文…

vscode编译c/c++找不到jni.h文件

解决办法: 一、下载JDK 访问Oracle官网的Java下载页面:Java Downloads | Oracle 选择适合您操作系统的JDK版本: 对于Windows,选择“Windows x64”或“Windows x86”(取决于您的系统是64位还是32位)。对于Linux&#…

扩散世界模型已训练出赶超人类的智能体?

论文标题: Diffusion for World Modeling:Visual Details Matter in Atari 论文作者: Eloi Alonso, Adam Jelley, Vincent Micheli, Anssi Kanervisto, Amos Storkey, Tim Pearce, Franois Fleuret 项目地址: https://github.com/eloial…

封装了一个使用UICollectionViewLayout 实现的吸附居左banner图

首先查看效果图 实现的原理就是通过自定义UICollectionView layout,然后 设置减速速率是快速就可以达到吸附的效果 _collectionView.decelerationRate UIScrollViewDecelerationRateFast; 下面贴出所有代码 这里是.h // // LBMiddleExpandLayout.h // Liubo…

Java零基础-顺序结构

哈喽,各位小伙伴们,你们好呀,我是喵手。运营社区:C站/掘金/腾讯云;欢迎大家常来逛逛 今天我要给大家分享一些自己日常学习到的一些知识点,并以文字的形式跟大家一起交流,互相学习,一…

10 个最佳 MP4 转换器,可帮助您将视频转换为 MP4

许多人正在寻找一种强大的工具将视频转换为 MP4。网上有很多 MP4 转换器,但只有少数能够有效地将视频转换为 MP4。我们根据实验室测试和用户报告确定了前 10 名 MP4 转换器。在这篇文章中,我们将向您展示这些 MP4 转换器具有哪些功能以及如何使用它们。 …

【Python】 Python中的`mkdir -p`功能解析与应用

基本原理 在Linux系统中,mkdir -p是一个常用的命令,用于创建目录。这个命令的特点是,如果目标目录已经存在,它不会报错,而是直接跳过;如果目标目录不存在,它会创建整个目录路径中所需的所有目录…

166.二叉树:相同的树(力扣)

代码解决 /*** Definition for a binary tree node.* struct TreeNode {* int val;* TreeNode *left;* TreeNode *right;* TreeNode() : val(0), left(nullptr), right(nullptr) {}* TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}* Tre…