linux - 如何从 DVD 驱动器运行 1 .sh,从硬盘运行 2nd .sh?

标签 linux bash export

<分区>

环境:带有 bash 终端的 Linux RedHat 5

我需要自动化一个流程来做两件事:

  1. 让用户安装提示用户输入的 DVD(带有脚本), 并在硬盘上创建一些目录。
  2. 让第二个脚本 scp 一些文件到硬盘驱动器目录,并且 然后自动刻录数据 DVD。

现在我需要用户手动 cd 到步骤 2 并运行 .sh2。

一般程序:

  1. 用户输入提供的光盘,安装 dvd 驱动器,并提示 一个名字”。读取变量“名称”、目录和子目录 目录在/tmp/"name"下创建。
  2. 用户必须手动导航到/tmp/name 目录和 ./2.sh,才能启动 关闭第二个脚本。

我在使用导出名称完全自动化和启动第二个 .sh 时遇到两个问题。问题是第二个 .sh 需要弹出安装的 dvd 驱动器(运行 .sh1 的驱动器),并且在后台运行 .sh2 完全跳过我在 .sh2 上执行的 scp 数据拉取。

关于如何导出 .sh1 变量、用脚本弹出 dvd,然后运行 ​​.sh2 脚本(它可以获取 .sh1(不再运行)脚本变量名)有什么想法吗?

我考虑过写一个变量名的文件到硬盘目录来解决导出变量的问题(导出名不起作用),但我仍然没有想到如何让.2sh自动运行/tmp/name 目录(.sh2 不允许 scps/dvd 刻录完成),执行 scp,并允许我的“刻录 dvd”.sh 运行。

最佳答案

您没有提供足够的细节来计算出答案的所有细节。然而:

1) 如果要卸载 DVD,调用第一个脚本的进程和第一个脚本本身(或任何其他进程)都不能将其作为当前目录。这意味着,您不能将第一个脚本调用为 cd/media/dvd; bash ./1.sh,但是你必须做类似 bash/media/dvd/1.sh

2) 在第一个脚本中创建/tmp/name 后,cd 到它,创建第二个脚本,使其可执行(不要忘记适当的shebang),并将其作为 exec ./2.sh 调用。使用 exec 至关重要。如果不这样做,第一个脚本的文件将保持打开状态,并且 DVD 挂载点将保持忙碌。如果您使用 exec,shell 知道不会再从该文件中读取任何行,将其关闭并释放 DVD 挂载点。

3) 将变量传递给脚本的最简单方法是将其作为命令行参数传递。因此,您应该使用类似 exec ./2.sh "$name" 的内容调用第二个脚本,并在第二个脚本的文本中将该参数称为 "$1" .但是,如果我理解正确的话,你想要传递的是你从中创建 /tmp/name 目录的同一个变量,即 ./2.sh< 的当前目录。如果是这种情况,则可以通过 2.sh 中的 name="$(basename $(pwd)) 检索它的值。

4) export name 对你不起作用,因为 export 使当前进程的子进程知道一个变量,但第二个脚本不是首先在你的场景中。 export name 如果您按照我在上一点中概述的方式进行操作,将会起作用,因为当您exec ./2.sh 时,环境保持不变,但它仍然是如果您显式传递该值,可读性会更高。

5) 一般来说,当您计划根据用户输入执行操作时,在执行任何操作之前对其进行清理是非常重要的:检查任何用户提供的字符串对于空白,奇怪的字符,例如空格,换行符,斜杠,分号等...还要检查在文件系统上操作时可能无害的字符,但可能会在新刻录的 DVD 上引起问题,检查哪些字符在每个字符上都是合法的您程序的步骤...简而言之,不要相信用户输入。

关于linux - 如何从 DVD 驱动器运行 1 .sh,从硬盘运行 2nd .sh?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49343764/

相关文章:

linux - Docker 上的 nginx: [emerg] socket() 0.0.0.0:80 失败(13:权限被拒绝)

Haskell 导出大量函数

php - 在 php 中导出为 epub 格式

java - GSON - 人类可读性

linux - 名称为 ! 的文件是什么意思?意思是?

linux - 当 shell=True 时检测 Popen() 错误

linux - 从 for 循环 bash 中传递的参数构建字符串

arrays - 如何在 bash 中设置数组元素的范围

bash - 如何将已包含参数的命令发送到 GNU 并行?

linux - bash - 转义字符按原样获取字符串