2011-08-27 28 views
0

有时,当我调试一个从命令行运行的程序时,一个看似明显的变化在我关闭终端窗口,打开一个新窗口并重试之前不起作用。我在Mac OS(即bash)和Windows上都发生过这种情况。为什么关闭终端窗口并打开一个新窗口有时候是解决方案?

这是我明智的解决方案失败时做的最后一件事,但我想知道为什么。这是关于命令行程序“捕获”创建时的快照的东西吗?

+0

我不确定,但它可能与记住命令名引用的可执行文件有关,如果你一直使用'/ usr/bin/foo',然后创建'/ usr/local/bin/foo',shell可能看不到后者。 (尽管我觉得这不是它)。 – Owen

+0

'hash -r'对Bash来说是一个不那么激烈的修复。 – tripleee

回答

1

壳可以哈希已知的二进制文件(这样他们就不必搜索路径它)

当改变全系统的环境变量,你需要开始一个新的外壳,以获得新的环境。请注意,仅当输入子shell不起作用,因为子进程从父母继承其环境

+0

有人可以扩展“壳可以散列已知的二进制文件”吗?我知道哈希是什么;当某个命令即将被执行时,它会以某种方式被使用吗? –

+0

_当改变系统范围的环境变量时,你需要启动一个新的shell来获得新的环境._好的,那正是我的想法。任何人都可以说更多**为什么**你需要启动一个新的shell?是否有一个原因,为什么shell _不能意识到所有环境变量的当前状态?谢谢。 –

+1

@Gregg:部分只是根据定义; UNIX有这样一个悠久的传统。它的主要用途是安全性:防止对环境的操纵,以防止损害PATH/LIBPATH/LD_LIBRARY_PATH等,这些可用于获取不可信的代码来执行。通过扩展,它可以隔离进程:某些进程将需要一个自定义的PATH等,如果子进程以某种方式从“新的全局环境”启动,他们根本无法正常工作,因为它们依赖于父进程的相同环境, – sehe

相关问题