Window下编写的sh文件在Linux/Docker中无法使用

Window下编写的sh文件在Linux/Docker中无法使用

  • 一、sh文件目的
    • [1.1 初始状态](#1.1 初始状态)
    • [1.2 目的](#1.2 目的)
  • 二、过程与异常
    • [2.1 首先获取标准ubuntu20.04 - 正常](#2.1 首先获取标准ubuntu20.04 - 正常)
    • [2.2 启动ubuntu20.04容器 - 正常](#2.2 启动ubuntu20.04容器 - 正常)
    • [2.3 执行windows下写的preInstall文件 - 报错](#2.3 执行windows下写的preInstall文件 - 报错)
  • 三、检查和处理
    • [3.1 评估异常](#3.1 评估异常)
    • [3.2 处理异常](#3.2 处理异常)
    • [3.3 调整后运行测试 - 正常](#3.3 调整后运行测试 - 正常)
    • [3.4 sh运行完,检查docker容器 - 完成](#3.4 sh运行完,检查docker容器 - 完成)
  • 四、小结

一、sh文件目的

1.1 初始状态

已经安装nvidia-dockerdocker中创建容器测试nvidia-smi正常

1.2 目的

制作Docker镜像,将Python环境【保存在文件python3_envs.txt中】部署到Docker镜像中,包括pytorchcuda等环境

二、过程与异常

2.1 首先获取标准ubuntu20.04 - 正常

shell 复制代码
sudo nvidia-docker pull ubuntu:20.04

2.2 启动ubuntu20.04容器 - 正常

shell 复制代码
>>>sudo nvidia-docker run -it -d --name=demo --gpus=all -v /home/download:/root/download ubuntu:20.04 /bin/bash
55d0ded464ac82cab65befa54ec749fcff61a638ecf57a96f22aae3b95428b64
>>>sudo nvidia-docker attach demo
root@55d0ded464ac:/#

2.3 执行windows下写的preInstall文件 - 报错

shell 复制代码
>>>root@55d0ded464ac:/#./preInstall.sh
 sh preInstall.sh 
: not foundsh: 2: 
E: Invalid operation update

使用vimlinux下编辑preInstall.sh,未能解决问题。

三、检查和处理

3.1 评估异常

在windows下用notepad++打开preInstall.sh,如下图,评估可能是因为行尾和linux格式不一致【因为这个是常见问题】

3.2 处理异常

用notepad++执行行尾转换【状态栏操作,如小图】,将行尾转换为正常linux格式

3.3 调整后运行测试 - 正常

shell 复制代码
>>>root@55d0ded464ac:/#./preInstall.sh
Hit:1 http://security.ubuntu.com/ubuntu focal-security InRelease
Hit:2 http://archive.ubuntu.com/ubuntu focal InRelease
Get:3 http://archive.ubuntu.com/ubuntu focal-updates InRelease [114 kB]
Hit:4 http://archive.ubuntu.com/ubuntu focal-backports InRelease
Get:5 http://archive.ubuntu.com/ubuntu focal-updates/main amd64 Packages [3895 kB]
Get:6 http://archive.ubuntu.com/ubuntu focal-updates/universe amd64 Packages [1480 kB]                       Fetched 5489 kB in 9s (625 kB/s)                                                                             Reading package lists... Done
......

3.4 sh运行完,检查docker容器 - 完成

复制代码
>>>root@55d0ded464ac:/#python3
Python 3.8.10 (default, Nov 22 2023, 10:22:35) 
[GCC 9.4.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import torch
>>> print(torch.cuda.is_available())
True
>>> 

四、小结

linux下运行从其他操作系统编写的sh文件时,需要检查文件行尾是否为linux格式


好记性不如烂笔头。

站在岸上学不会游泳。

眼看千遍,不如手过一遍。


may the odds be ever in your favor ~

相关推荐
一叶之秋14122 小时前
Linux基础IO
linux·运维·服务器
love530love2 小时前
升级到 ComfyUI Desktop v0.7.0 版本后启动日志报 KeyError: ‘tensorrt‘ 错误解决方案
开发语言·windows·python·pycharm·virtualenv·comfyui·comfyui desktop
longerxin20205 小时前
在 Linux 上使用 SCP 将文件传输到 Windows(已开启 SSH)
linux·运维·ssh
zhaotiannuo_19988 小时前
渗透测试之docker
运维·docker·容器
王正南9 小时前
kali-linux 虚拟机连接安卓模拟器
android·linux·运维·虚拟机连接模拟器·安卓模拟器,linux虚拟机
三不原则9 小时前
故障案例:容器启动失败排查(AI运维场景)——从日志分析到根因定位
运维·人工智能·kubernetes
吳所畏惧9 小时前
Linux环境/麒麟V10SP3下离线安装Redis、修改默认密码并设置Redis开机自启动
linux·运维·服务器·redis·中间件·架构·ssh
yueguangni9 小时前
sysstat 版本 10.1.5 是 CentOS 7 的默认版本,默认情况下确实不显示 %wait 字段。需要升级到新版sysstat
linux·运维·centos
Davina_yu9 小时前
Windows 下升级 R 语言至最新版
开发语言·windows·r语言
funfan051710 小时前
【运维】MySQL数据库全量备份与恢复实战指南:从入门到精通
运维·数据库·mysql