Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux 持久化由源脚本定义的shell函数或别名_Linux_Bash_Shell - Fatal编程技术网

Linux 持久化由源脚本定义的shell函数或别名

Linux 持久化由源脚本定义的shell函数或别名,linux,bash,shell,Linux,Bash,Shell,我有一个脚本——在本例中,名为myCommand.sh——当使用.myCommand.sh源代码时,它在本地shell中定义了一个名为sayit的命令 但是,现在,当我运行时。myCommand.sh,命令sayit仅在当前终端窗口中定义 即使在没有手动调用的情况下重新启动终端,我如何使其工作?chmod+x是一种永久性操作。运行/mycommand.sh,或/path/to/mycommand.sh,或将脚本放在路径中的文件夹中,例如~/bin/。myCommand.sh将仅在当前终端中工作。

我有一个脚本——在本例中,名为
myCommand.sh
——当使用
.myCommand.sh
源代码时,它在本地shell中定义了一个名为
sayit
的命令

但是,现在,当我运行
时。myCommand.sh
,命令
sayit
仅在当前终端窗口中定义


即使在没有手动调用的情况下重新启动终端,我如何使其工作?

chmod+x
是一种永久性操作。运行
/mycommand.sh
,或
/path/to/mycommand.sh
,或将脚本放在路径中的文件夹中,例如
~/bin/

。myCommand.sh将仅在当前终端中工作。将此脚本放在某个位置,并在.bash_配置文件中添加相同的位置

示例: 文件:/home/myuser/.myCommand/myCommand.sh

Bash配置文件条目:
PATH=$JAVA\u HOME/bin:$JAVA\u HOME/jre/bin:/usr/bin:/usr/local/bin:/sbin:/usr/sbin:$PATH:/HOME/.myCommand:。

假设在
myCommand.sh
中有以下内容:

sayit() { echo "Hello World"; }
#!/bin/sh
echo "Hello World"
…或更糟糕/更脆弱的替代方案:

alias sayit='echo "Hello World"'
…然后您可以通过两种方式将其永久化:

  • 创建一个名为
    sayit
    的脚本,其中包含
    echo“Hello World”
    。这可能如下所示:

    sayit() { echo "Hello World"; }
    
    #!/bin/sh
    echo "Hello World"
    
  • 将源代码myCommand.sh中的命令添加到点文件中(即
    ~/.bashrc
    )。这意味着您将附加以下内容:

    . /path/to/myCommand.sh
    
    …或其特定于bash的等效文件:

    source /path/to/myCommand.sh
    
    …到您的
    ~/.bashrc
    文件


你看到了吗?对于您的问题,有一个合适的解决方案。例如,我想使用一个名为sayit的bash命令来打印“helloworld”。当我执行.myCommand时,它可以工作,但只适用于当前终端。将无法在新终端中工作。另外,您不需要使用
chmod+x
即可运行
。somescript
源代码
;它只适用于作为外部进程运行的命令,而不是源代码到shell中。当我执行.myCommand时,它可以工作,但只适用于当前终端。将脚本放在路径中的文件夹中,例如~/bin/“
。myCommand.sh
——正如OP报告他们正在做的那样——正在将内容来源于活动shell——OP的命令可能被定义为shell函数、别名或类似的命令。您在这里提出的建议只有在执行脚本直接运行所需命令时才有效,而不是在活动shell中定义它们以供以后使用。