如何定义 shell 脚本变量使其具有脚本之外的作用域

2023-11-23

我正在使用 Ubuntu Natty。

我有一个 shell 脚本,已保存到 /etc/init.d/qstart。 shell脚本包含以下内容:

apt-get -y update
apt-get -y upgrade
apt-get -y install tofrodos gcc make nmap lsof expect sysstat
dbpass="mydbpassword"

但是,执行脚本后,我想测试 dbpass 是否已设置,然后输入echo $dbpass在提示中。但它是空的。

如何在 shell 脚本中定义变量以便可以在其外部访问它?

提前致谢。


您无法在父进程的环境中设置变量。您只能设置当前进程的环境或为进程的子进程准备环境。

也就是说,您可以指示 shell 从当前 shell 进程中的脚本运行命令,而不是创建新的 shell。你可以这样做:

source your_script.sh

or

. your_script.sh

(注意点后面的空格)。因为这里的命令里面your_script.sh由当前 shell 运行,对脚本内环境所做的更改将被保留。

但是,如果运行脚本的 shell 不是您希望使用环境变量的 shell 的祖先,那么根本无法使用环境变量来实现您的目标。例如,如果您的脚本在初始化时由某个无子 shell 运行,则所有完成的环境设置都将永久丢失,不可逆转。在这种情况下,请使用其他一些机制,例如文件(可能位于/var).

如果您希望给定 shell 的所有实例在其环境中设置某些变量,则可以使用大多数 shell 使用的初始化脚本。通常,它们有系统范围和每个用户的初始化脚本。例如,bash 使用/etc/profile作为交互式登录 shell 的系统范围初始化脚本和$HOME/.bash_profile (also $HOME/.bash_login and $HOME/.profile)作为每个用户的初始化脚本。看这个参考有关 bash 特定的详细信息。如果您使用不同的 shell,请尝试其各自的手册。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何定义 shell 脚本变量使其具有脚本之外的作用域 的相关文章

  • 如何更改 Ubuntu 14.04 上的 php-cli 版本?

    我是 Linux 新手 在篡改时破坏了一些 php 设置 如果我执行一个包含以下内容的 php 脚本 phpinfo 它显示 php 版本为 5 6 但通过命令行 如果我运行php v它返回 7 0 版本 我想让两个版本匹配 我怎样才能修复
  • 为什么我不能将 sed 的输出重定向到文件

    我正在尝试运行以下命令 someprogram tee dev tty sed s 2 gt output file 但当我去查看时 该文件始终是空白的 如果我删除 gt output file从命令末尾 我可以看到 sed 的输出 没有任
  • Godaddy 托管上的 CakePHP 控制台

    我一直在努力让我的 CakePHP 网站在 Godaddy 网格托管 帐户上运行 我的蛋糕应用程序设置是从帐户的子目录托管的 并且可以通过子域访问 我必须调整我的 htaccess 文件才能使其正常工作 现在我需要让 CakePHP 控制台
  • 仅当重复行与模式匹配时才删除它们

    这个问题 https stackoverflow com questions 1444406 how can i delete duplicate lines in a file in unix有一个很好的答案说你可以使用awk seen
  • 拆分字符串以仅获取前 5 个字符

    我想去那个地点 var log src ap kernelmodule 10 001 100 但看起来我的代码必须处理 ap kernelmodule 10 002 100 ap kernelmodule 10 003 101 等 我想使用
  • Django + nginx + uwsgi 无法登录

    我有非常简单的登录逻辑 类似于官方 Django 解决方案 class Login FormView template name login html form class AuthenticationForm def get self a
  • 有一种简单的方法可以忽略时间戳来区分日志文件吗?

    我需要比较两个日志文件 但忽略每行的时间戳部分 确切地说是前 12 个字符 有没有一个好的工具 或者一个聪明的 awk 命令 可以帮助我 根据您使用的 shell 您可以改变方法 Blair https stackoverflow com
  • 在 bash 中使用单个命令为 shell 变量分配默认值

    我对 bash 3 00 shell 脚本中的变量进行了大量测试 如果未设置变量 则它会分配默认值 例如 if z VARIABLE then FOO default else FOO VARIABLE fi 我似乎记得有一些语法可以在一行
  • 带有 CUDA 的 Tensorflow:导入错误

    我已经按照 NVIDIA 教程中的说明一步步安装了 TensorFlow Ubuntu 16 04 桌面版 GTX 970 http www nvidia com object gpu accelerated applications te
  • 通过特定分隔符删除字符串

    我的文件中有几列 其中第二列有 分隔符 我想删除第二列中的第一个 第三个和第四个字符串 并将第二个字符串留在该列中 但我有正常的分隔符空间 所以我不知道 input 22 16050075 A G 16050075 A G 22 16050
  • 从 csv 文件中删除特定列,保持输出上的相同结构[重复]

    这个问题在这里已经有答案了 我想删除第 3 列并在输出文件中保留相同的结构 输入文件 12 10 10 10 10 1 12 23 1 45 6 7 11 2 33 45 1 2 1 2 34 5 6 I tried awk F 3 fil
  • 使用 posix shell 测试字符串中的正则表达式

    如何测试字符串是否与特定字符串匹配正则表达式与基本 无 bash 或任何其他 posix shell 脚本 在 if 语句中 您可以使用expr在 POSIX shell 中计算正则表达式的命令 s Abc expr s alpha 3 e
  • 如何在 shell 脚本中并行运行多个实例以提高时间效率[重复]

    这个问题在这里已经有答案了 我正在使用 shell 脚本 它读取 16000 行的输入文件 运行该脚本需要8个多小时 我需要减少它 所以我将其划分为 8 个实例并读取数据 其中我使用 for 循环迭代 8 个文件 并在其中使用 while
  • apt-get 无法在 ubuntu dockerfile 中工作

    我对 docker 相当陌生 正在尝试通过编写自己的镜像来学习 并且目前正在阅读 Docker 的实际操作 ISBN 1633430235 在我自己的代码和书中的示例 第 146 页 中 我想通过 dockerfile 安装 git My
  • 迭代 bash 脚本中的变量名称

    我需要在一堆文件上运行一个脚本 这些文件的路径被分配给train1 train2 train20 我想 为什么不使用 bash 脚本使其自动执行呢 所以我做了类似的事情 train1 path to first file train2 pa
  • 如何在数组中存储包含双引号的命令参数?

    我有一个 Bash 脚本 它生成 存储和修改数组中的值 这些值稍后用作命令的参数 对于 MCVE 我想到了任意命令bash c echo 0 0 echo 1 1 这解释了我的问题 我将用两个参数调用我的命令 option1 without
  • 添加要在给定命令中运行的 .env 变量

    我有一个 env 文件 其中包含如下变量 HELLO world SOMETHING nothing 前几天我发现了这个很棒的脚本 它将这些变量放入当前会话中 所以当我运行这样的东西时 cat env grep v xargs node t
  • 对目录中的所有文件执行命令

    有人可以提供执行以下操作的代码 假设有一个文件目录 所有这些文件都需要通过程序运行 该程序将结果输出到标准输出 我需要一个脚本 该脚本将进入一个目录 对每个文件执行命令 并将输出连接到一个大输出文件中 例如 要在 1 个文件上运行命令 cm
  • 如何在 Linux shell 中将十六进制转换为 ASCII 字符?

    假设我有一个字符串5a 这是 ASCII 字母的十六进制表示Z 我需要找到一个 Linux shell 命令 它将接受一个十六进制字符串并输出该十六进制字符串代表的 ASCII 字符 所以如果我这样做 echo 5a command im
  • 两种情况或 if 哪个更快? [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我必须制作一个 非常 轻的脚本 它将接受用户的选项并调用脚本中的函数来执行一些任务 现在我可以使用 IF 和 CASE 选项 但我想知道两

随机推荐

  • 使用 JavaScript 控制 Flash Player

    我希望能够在与 Flash 组件相同的页面中使用 JavaScript 控制 Flash 电影流 包括 播放和暂停流 改变流 我已经可以加载播放器并设置 flash 参数 但我不知道流开始后如何与播放器交互 是否可以在不修改当前用于播放电影
  • 电子“要求未定义”

    我正在制作一个应用程序 我需要授予对文件系统 fs 模块的访问权限 但是即使使用nodeIntegration启用渲染器给我这个错误 Uncaught ReferenceError require is not defined 我能找到的所
  • Meyers 的单例模式实现线程安全吗?

    以下是使用延迟初始化的实现Singleton 迈耶斯的单例 线程安全吗 static Singleton instance static Singleton s return s 如果不是 为什么以及如何使其线程安全 In C 11 它是线
  • 编辑 UITextField 时如何关闭键盘

    我知道当我想关闭键盘时 我需要告诉我的 UITextField 退出第一响应者 但我不确定如何知道用户何时按下键盘上的 完成 键 有我可以留意的通知吗 我设置了代表UITextField to my ViewController class
  • 多维长度数组反射java

    如何在java上使用反射找到多维数组的长度 多维数组没有 长度 这个概念 它可能不是矩形的 我猜你说的是维数 您需要迭代地深入其中并进行计数 public int getDimensionCount Object array int cou
  • 在SSH.NET中执行长时间命令并在TextBox中连续显示结果

    有没有办法在 Windows 应用程序 如 PuTTY 中执行 Linux 命令并将结果显示在文本框中 例如我正在尝试执行以下命令 wget http centos webpanel com cwp latest sh cwp latest
  • Web API 中的异常处理

    在我的 Web API 项目中 我创建了子项目 类库 在其中处理实际的数据处理操作 我的后端数据库是DocumentDB 我的问题是如何告诉我的 Web API 操作方法我在类库的数据方法中可能遇到的任何错误 一旦我的 Web API 方法
  • 当应用程序处于后台时,NSTimer 的行为是什么?

    我知道当您后台应用程序时 计时器会停止运行 然而 当你从后台回来时 行为是什么 定时器是否保持原来的状态fireDate 我遇到了一个问题 即从后台返回并设置十分钟后触发的 NSTimer 时 有时我会立即让计时器在之前触发applicat
  • 在 RawContacts 中找不到 Facebook 联系人

    我正在尝试构建一个联系人管理应用程序 我的手机上有多个帐户的联系人 包括 Facebook 和 HTC Facebook 由于某种原因 我无法从RawContacts表的ContactsContract managedQuery Conta
  • 在 Google Chrome 中打印表格时,内容与标题重叠

    我在打印包含 HTML 代码的表格时使用 Google Chrome 遇到问题 我需要创建一个带有标题的文档 为了实现这一点 我使用带有 thead 元素的表格 因此浏览器将为打印文档的每个页面复制它 问题是当我在页面中有分页符时 内容与标
  • 获取Windows消息名称[重复]

    这个问题在这里已经有答案了 我有一个使用 DLL 扩展的 Windows 程序 我通过调试流对象包含调试代码 这些对象通过 OutputDebugString 进行打印 并且可以使用 DebugView 进行查看 接口的一部分是消息处理函数
  • 多相机图像拼接

    我一直在运行一个从多个摄像机拼接图像的项目 但我认为我遇到了瓶颈 我对这个问题有一些疑问 我想将来尝试将它们安装在车辆上 这意味着相机的相对位置和方向是固定的 另外 由于我使用多个相机并尝试使用同位图来缝合它们的图像 我会将相机放置得尽可能
  • Android底部导航查看项目文本颜色?

    我开始研究 Android 底部导航视图 但我面临一个问题 如果我向底部导航视图添加 5 个项目 则只有选定的项目显示项目文本 如果我添加 3 个项目 它就可以正常工作 任何人请告诉我如何显示所有 5 个项目的项目文本 先感谢您 菜单 xm
  • JsonMappingException 没有单字符串构造函数/工厂方法 Jackson

    我正在尝试使用 Spring 构建 Jackson 支持来解析从控制器中的 UI 发送的 JSON 数据 这是我的代码 final Map
  • 使用 Interface Builder 进行绑定(适用于 iPhone 应用程序)

    如何使用 Interface Builder 绑定 iPhone SDK 控件 例如 UISlider 与常规 Cocoa 应用程序不同 当使用 Interface Builder 打开 iPhone 应用程序 XIB 时 绑定选项卡似乎不
  • 使用 doxygen 的 \link 命令

    我有一个外部 HTML 文件 我想从我的 doxygen 相关页面 选项卡或左侧框架中链接 看来我需要使用 link命令 但我找不到如何使用它或在哪里使用它的好例子 我目前正在使用 doxywizard 生成 HTML So is link
  • jQuery 中的并行 JSONP 请求不会触发多个“回调事件”?

    当我执行多个 jsonp 请求时 我在 jQuery 中遇到问题 所有请求都使用相同的 jsonpCallback 函数 似乎只有其中之一才会触发回调函数 JSONP 请求是否会以某种方式相互覆盖 下面是向 github 发出 2 个 js
  • 自动实现属性的 C# 协变返回

    如你所知 C 9 0 Net 5 现在允许协变返回 我需要帮助将其应用于一组具有自动实现属性的类 我有两个代表金融银行账户和交易的抽象类 我将它们抽象化 因为我将从各种数据源中提取数据 虽然主要属性在所有源中都是通用的 但每个源可能有我想要
  • JCenter 弃用;对 Gradle 和 Android 的影响

    我应该担心吗JCenter被弃用 为什么我应该将我的库从JCenter到其他 Maven 存储库 我可以继续使用吗jcenter 在我的 Gradle 构建脚本中 Replace jcenter 有了这个 mavenCentral
  • 如何定义 shell 脚本变量使其具有脚本之外的作用域

    我正在使用 Ubuntu Natty 我有一个 shell 脚本 已保存到 etc init d qstart shell脚本包含以下内容 apt get y update apt get y upgrade apt get y insta