Answers:
有没有一种方法,而无需每次都键入点?例如,从脚本本身更改为父外壳的命令?
我认为没有(除了键入source somescript.sh
,但这可能不是您要查找的^^)。
如果您像往常一样使用来运行脚本./somescript.sh
,那么外壳将分叉并执行此命令。它将命令传递给内核,然后内核通过解析#!
脚本中的行来决定如何执行此命令。然后,内核启动指定的解释器(在这种情况下,可能是bash
子外壳程序)。因此somescript.sh
,对其环境所做的修改被隔离在子外壳中而不会影响父外壳。
如果希望外壳程序在不启动其他进程的情况下读取脚本本身,则必须使用.
or source
关键字明确地告诉它。
alias
命令创建子外壳,如scott建议的那样。
如果您./somescript.sh
作为外部程序执行,则它在运行中的Shell进程内无法执行任何操作,例如访问未导出的变量,设置变量,更改当前目录等。无法解决此问题。
(好吧,您可以从子进程中运行调试器并调整父进程的内存。但是,如果尝试这样做,最有可能的结果是崩溃了父shell。)
您需要运行. ./somescript.sh
。您可以根据需要将其隐藏在别名或函数的后面,但是再次必须在父外壳中完成别名或函数的定义。
我认为您尝试运行的脚本不可执行。chmod a+x somescript.sh
会将用户,组和其他(ugo)的执行位添加到该文件。文件的第一行也将需要#!顶部的线,例如#!/bin/bash
。
ls -l somescript.sh
会显示该文件的rwx三元组(读/写/执行)。假设您拥有文件,则至少在第一组中需要x。
export PATH=$PATH:/usr/local/bin
将/ usr / local / bin添加到$ PATH,则确实需要提供文件源来更改运行环境变量。这个问题确实是“如何从bash脚本中以编程方式更改运行的shell中的环境变量?” 脚本. ./somescript.sh
执行得很好-您正在使用dot命令来生成文件。tcsh对同一件事使用“源”。