【问题标题】:Move script.sh to bin将 script.sh 移动到 bin
【发布时间】:2016-07-02 01:13:33
【问题描述】:

我是 shell 编程的新手,我正在尝试创建一个简单的脚本,它可以为我提供有关 Scientific Linux 6 上机器状态(即日期、时间、用户登录等)的一些信息(我知道它是旧的,但我大学的系在上面运行,所以没有逃脱)

基本上我已经创建了我的脚本“sysinfo.sh”

 #!/bin/sh
  ....
  exit 0

作为 root 用户,我想移动它以便可以在任何地方执行它,我认为正确的方法是

sudo mv sysinfo.sh usr/local/bin

但我收到错误消息

mv: cannot move `sysinfo.sh' to `usr/local/bin': No such file or directory

然后我寻找 PATH 它给了我

$ echo $PATH
/u/geo2/sw//System/tools/bin:/usr/bin:/bin

移动脚本的正确位置是什么?

【问题讨论】:

    标签: linux bash shell path


    【解决方案1】:

    此类操作或学习的最佳实践是在您的 $HOME/bin 目录中包含脚本。

    mkdir $HOME/bin
    export PATH=$PATH:$HOME/bin
    mv sysinfo.sh $HOME/bin
    chmod +x $HOME/bin/sysinfo.sh
    

    如果你还是想将它移动到 /usr/local/bin,为什么不这样做:

    sudo mv sysinfo.sh /usr/local/bin
    chmod +x /usr/local/bin/sysinfo.sh
    

    chmod 命令将使脚本可执行。

    来自 chmod 人:

    x -- 执行/搜索位。

    【讨论】:

    • 一个更好的文件名应该是sysinfo 没有.sh 扩展名。
    • 当然可以,不过假设那家伙在学习,让他看看,是个shell文件。
    【解决方案2】:

    您发布的命令表明您正在尝试使用绝对路径进行复制,但您错过了前导斜杠 -- 目录应该是/usr 而不是usr

    试试

    sudo mv sysinfo.sh /usr/local/bin
    

    请注意,除非指定了绝对路径,否则 shell 会查找相对于当前工作目录的路径。 在这种情况下,shell 正在寻找当前目录下的子目录usr,但没有找到; 因此出现错误消息。

    【讨论】:

    • @tripleee,感谢您的编辑!我无法弄清楚发布代码的正确方法。我要去阅读手册了... :-)
    【解决方案3】:

    非常感谢! 最后,我没有意识到目录 /usr/local/bin 不在 PATH 中 所以我只需要

    export PATH=$PATH:/usr/local/bin
    sudo mv sysinfo.sh /usr/local/bin
    

    :D

    【讨论】:

    • 您帖子中的第二个命令发挥了作用,而不是第一个。 PATH 变量仅被 shell 用于查找可执行文件。 mvcp 总是希望提供源和目标。它们可以是绝对路径或相对路径。另外,您已经回答了自己的问题,这很好。但是答案与已经发布的答案没有什么不同。您可以简单地接受其中一个答案,而不是发布一个新答案! SO 是一个问答网站,与常规论坛有点不同:-)
    • 此外,既然您已将 /usr/local/bin 添加到 PATH 变量并将脚本放在那里,您可以在登录时从任何地方调用该脚本以执行
    猜你喜欢
    • 2018-04-26
    • 1970-01-01
    • 2010-12-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-01
    相关资源
    最近更新 更多