我有一个tmp.txt
包含要导出的变量的文件,例如:
a=123
b="hello world"
c="one more variable"
Run Code Online (Sandbox Code Playgroud)
如何使用export
命令导出所有这些变量,以便子进程以后可以使用它们?
我想安装最新的 Python,在撰写本文时为 3.6。但是,存储库说 Python 3.4.2 是最新版本。
我试过了:
$ sudo apt-get update
$ sudo apt-get install python3
python3 is already the newest version.
$ python -V
Python 3.4.2
Run Code Online (Sandbox Code Playgroud)
为了在我的 Windows 工作站上升级到 Python 3.6,我只需下载一个 exe,单击“下一步”几次,就完成了。在 Debian Jessie 上安装 Python 3.6 的正确且官方接受的程序是什么?
这是我长期以来一直遇到的一个问题,但每次我试图弄清楚一些事情时,我都会迷失方向,所以我想我最好在这里问一下,也许更有经验的人可以帮助我。
我的 Raspberry Pi 正在运行 Raspbian Jessie,我经常使用 SSH 登录它并远程执行命令。在我的第一个 SSH 会话中,我注意到每次登录时都会在 RPi 上ssh-agent
生成一个进程,但在ing时从未被杀死:多次登录和注销导致生成一堆进程,只是挂在那里什么也不做。四处闲逛,到处阅读手册页和答案,我最近了解了. 此外,我注意到发出会导致产生另一个实例。我在相关的手册页上阅读exit
ssh-agent
ssh-agent
source ~/.bashrc
ssh-agent
SSH_AGENT_PID
应该定义环境变量,因为ssh-agent
程序应该在 an 中启动eval
以执行其输出并定义此类变量,然后其他与 SSH 相关的命令使用这些变量,包括ssh-agent -k
(杀死相对于当前会话的代理),所以我跑echo $SSH_AGENT_PID
和echo $SSH_AUTH_SOCK
,但它们都是空的。我突然意识到:可能该进程不会在注销时被杀死,因为它ssh-agent -k
试图从未设置的环境变量中读取其 PID。
由于ssh-agent
没有在注销时被杀死,并且这肯定会发生,因为所需的环境变量没有设置,它只能意味着一件事:调用ssh-agent
login 的人可能没有以正确的方式(这将是eval "$(ssh-agent -s)"
)。所以我想:嗯,有什么问题吗?我会找到执行哪个配置文件、服务或登录脚本来启动代理并手动修复它!它到底在哪里?
由于我注意到ssh-agent
每次调用时都会生成an source ~/.bashrc
,这是我检查的第一个文件,但那里甚至没有远程引用与 SSH 相关的任何内容。我一直在使用以下所有文件中vi
的字符串搜索ssh
,但一无所获:
~/.bashrc
~/.profile …
Run Code Online (Sandbox Code Playgroud) 我有一个简单的脚本,可以将补丁应用于给定的包,并且由于每次升级所述包时补丁都会被覆盖,我真的很想在每次升级后自动应用补丁。
为此,我创建了一个文件/etc/apt/apt.conf.d/
并为DPkg::Post-Invoke
. 正如所记录的那样man apt-get
,apt-get
在使用dpkg
. 然而,这个钩子似乎没有关于安装了哪个特定包的任何信息,所以我不知道是否必须应用补丁。没有任何东西传递给它的标准输入,没有任何东西作为参数传递,并且手册页没有提及它。
所以为了解决这个问题,我做了我唯一能想到的事情:我添加了另一个钩子 for DPkg::Pre-Install-Pkgs
,它在安装包apt-get
之前运行。这个钩子(通过标准输入)获取.deb
将要安装的文件列表dpkg
,所以我只检查是否有任何文件名与我想要修补的包的名称匹配,如果是,我在/tmp
. 当我的另一个钩子被执行时,它首先检查所述文件是否存在,如果存在,则将补丁应用于刚刚安装的包。
这是我创建的文件/etc/apt/apt.conf.d/
:
DPkg::Pre-Install-Pkgs {
"while read -r pkg; do case $pkg in *somepkg*) touch /tmp/.patch && exit 0; esac done < /dev/stdin";
};
DPkg::Post-Invoke {
"[ -f /tmp/.patch ] && /home/marco/scripts/apply_somepkg_patch.sh && rm -f /tmp/.patch; exit 0";
};
Run Code Online (Sandbox Code Playgroud)
要清楚:apply_somepkg_patch.sh
简单地编辑包提供的文件的内容。我希望每次都升级和修补所述文件,我不想“锁定”它所以它不会升级。
现在,虽然这一切都很好,但它看起来很脏,对我来说有点不对。有没有更清洁的方法来实现这一点?也许只使用DPkg::Post-Invoke …
由于内存段是 Linux 操作系统的一部分,是否可以使用简单的 C 程序或任何 Linux 命令来查看它们各自的地址。