【问题标题】:Bash Script To Add A Folder/Directory to the path in linux not working [duplicate]Bash脚本将文件夹/目录添加到linux中的路径不起作用[重复]
【发布时间】:2015-10-31 09:33:39
【问题描述】:

我创建了一个 bash 脚本来添加 /My_Scripts/Bash_Scripts 到linux的默认PATH。

!/bin/bash
#This Script is used to add a folder/diectory to the PATH..


echo -e "\e[92m\e[1mCREATING PATH...........\n\n"
cd
mkdir My_Scripts
cd My_Scripts
mkdir Bash_Scripts
cd

export PATH=$PATH:$HOME/My_Scripts/Bash_Scripts
echo -e "\e[92m\e[1mPATH CREATON SUCCESSFUL\n \e[39m"
echo $PATH

脚本的输出是

root@kali:~/Desktop# bash add_path
CREATING PATH...........


PATH CREATON SUCCESSFUL

`/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/root/My_Scripts/Bash_Scripts'

但是如果我在外面的终端输入echo $PATH,路径是不会加的

root@kali:~/Desktop# $PATH
bash: /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin: No such file or directory

【问题讨论】:

    标签: linux bash backtrack-linux


    【解决方案1】:

    您正在启动一个新的 bash 进程,而 PATH 仅在新进程的上下文中被修改。当此进程退出时,在其环境中所做的更改不会传播到父进程。

    相反,您可能希望在当前 bash 进程的上下文中修改 PATH。如果你暂时需要这个,你可以source你的脚本。 source 将在当前 bash 进程的上下文中运行。当心任何副作用 - 比如cd 将更改目录,exit 将终止当前的 bash 进程。

    如果您希望在以后的所有交互会话中永久更改此更改,您可以修改~/.bashrc

    另外,shebang 的语法是#!/path/to/program,你缺少#

    【讨论】:

    • 感谢您的回复。现在我知道是什么导致了问题。你能告诉我我应该在脚本中进行哪些更改,以便我可以将其永久用于未来的交互式会话..
    • 在您的 .bashrc 中包含 export PATH=$PATH:$HOME/My_Scripts/Bash_Scripts
    • 先生,我是 bash 编程新手..你能告诉我整个脚本吗
    • 每个人都从新开始。见gnu.org/software/bash/manual/html_node/Bash-Startup-Files.html,谷歌是你最好的朋友:)
    • 先生,在谷歌上搜索它没有运气,所以你能写一个 bash 脚本,将 /My_Scripts/Bash_Scripts 复制到 .bashrc
    【解决方案2】:

    您的更改仅在当前 shell 中受到影响。将条目放入 .bashrc 文件中。它将影响所有终端。打开 .bashrc 文件并添加以下行并运行文件 -

     vim ~/.bashrc
     export PATH="$PATH:/home/username"
     ~/.bashrc 
    

    编辑父外壳

    脚本.sh

    #!/bin/bash 
    export "PATH=$PATH:$HOME/My_Scripts/Bash_Scripts"
    echo $PATH
    

    $~ PATH=$(./script.sh)

    $~ echo $PATH

    /usr/lib/lightdm/lightdm:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/home/loganaayahee/My_Scripts/Bash_Scripts
    

    【讨论】:

    • 谢谢先生的回复...请告诉我我应该做哪些改变来自动化我的脚本
    • 打开 .bashrc 文件并附加路径。 Ex - export PATH="$PATH:/home/New_pathname" 保存文件并运行 - bash .bashrc
    • 先生,你能写一个 bash 脚本来做这件事吗
    • 你能打开.bashrc文件吗
    【解决方案3】:

    第一件事 - 你应该使用echo $PATH。只需输入$PATH,您就可以尝试执行命令,因此会出现“没有这样的文件或目录错误”

    接下来 - /root/My_Scripts/Bash_Scripts 并未真正添加到 PATH。您在脚本中看到的第一个输出完成,因此可以在那里看到更改。

    原因是PATH 只会在脚本shell 的上下文中设置,以source add_path 执行它以保留变量中的更改(但仅适用于当前shell)。

    如果您希望变量在所有 shell 中保持不变 - 将其添加到 /.bashrc(因为您是以 root 身份运行的)。

    【讨论】:

    • 谢谢你的回复......现在我似乎明白了这个问题..但我不知道如何自动化它..你能告诉我我必须在我的脚本中进行哪些更改才能自动化它
    • 将其附加到某个文件并在您的 .bashrc 脚本中获取该文件(或从中导出)。这样更改将是永久性的
    • 先生,我是 bash 新手。而且我不知道该怎么做...所以请您编写一个bash脚本,将/My_Scripts/Bash_Scripts复制到.bashrc
    • 看来你已经安装了 Kali linux。如果是故意的 - 在继续之前,您需要先学习 bash 和 linux 基础知识。所以我强烈建议您查看手册并自己尝试。
    猜你喜欢
    • 2013-12-02
    • 1970-01-01
    • 2018-03-02
    • 2016-10-23
    • 2019-01-04
    • 1970-01-01
    • 1970-01-01
    • 2017-06-29
    • 1970-01-01
    相关资源
    最近更新 更多