开始工作时,我必须运行几个命令:
source work/tools
cd work/tool
source tool
setup_tool
当然,每天这样做几次真的很麻烦,所以我尝试制作一个bash脚本tool
,我把这些命令放在/user/bin
中用命令<运行它/ p>
tool
然而,有一个问题。当我运行脚本然后尝试通过键入一些基于工具的命令来工作时,它不起作用。
我想,它很好,因为如果我创建一个脚本然后运行它,脚本似乎在同一个终端窗口中运行,但它真正做的是,它的行为就好像它创建了一个&#34;隐藏的窗口&#34;对于它的执行和脚本终止后,隐藏的窗口&#34;也终止了。所以我问 - 有没有办法自动化source
命令?
我尝试使用xterm -hold -e
命令,但它在新窗口中运行编程脚本。显然,我不想要那样。如何在当前窗口中运行它?
答案 0 :(得分:3)
请勿在{{1}}中放置此类文件。作为一般规则,您不希望混淆像这样的分发拥有位置。如果您需要系统范围的位置,可以使用/usr/bin
,或者您可以在主目录中创建一个目录来保存这样的内容供您自己使用(并将其添加到/usr/local/bin
)。
你注意到的是,当它自己作为脚本运行时($PATH
,tool
等),脚本在自己的shell会话中运行(与终端窗口无关) as-such)并且您不希望这样(因为脚本所做的更改不会持久存储到您当前的shell会话中。)
您要做的是“源”/在当前会话中运行脚本。你已经在使用你列出的那组命令(/path/to/tool
正在做的那样)。
因此,不要使用source work/tools
或tool
而是使用/path/to/tool
或source /path/to/tool
。
正如fedorqui正确地指出你甚至不需要任何地方的脚本,因为你可以为此创建一个shell函数(在你的普通shell启动文件. /path/to/tool
等),然后运行当您需要设置时,该功能。
当你这样做时,要小心使用完整的路径,因为你可能希望无论你在运行它时遇到什么目录,都希望它能够正常工作。
答案 1 :(得分:2)
它不会创建新的隐藏窗口,也不会创建终端。如果您正在运行脚本,通常会在新的shell进程上运行。您正在运行的脚本应该修改shell环境,但如果您在新的shell进程中运行该脚本,则该shell进程的环境是被修改的环境,而不是您的环境贝壳环境。
通常必须使用source
命令运行需要修改当前shell环境的脚本。您需要做的是在当前shell中运行脚本。所以你应该做source /path/to/tool
。
如果您希望能够仅使用tool
来源脚本,请将其放在别名文件/ shell启动中(检查发行文档所在的文件,但它通常是.bash_aliases或.bashrc):
alias tool="source /path/to/tool"