终端无法运行存储在 PATH 目录中的 shell 脚本文件

Posted

技术标签:

【中文标题】终端无法运行存储在 PATH 目录中的 shell 脚本文件【英文标题】:Terminal cannot run shell script files stored in PATH directories 【发布时间】:2015-05-27 13:06:37 【问题描述】:

尝试运行 shell 脚本文件时出现“找不到命令”。该文件本身存储在一个目录中,该目录已添加到 PATH 中,但终端仍然无法将其识别为 shell 脚本。

这是我尝试的顺序:

tajimura/GAMIT% echo $PATH
/usr/local/bin:/usr/bin:/bin:/user/games:/usr/X11R6/bin:/usr/bin/X11:/usr/lib64/jvm/jre/bin:/home/tajimura/GAMIT/gamit/bin:/home/jaimura/GAMIT/kv/bin:/home/tajimura/GAMIT/com
tajirmura/GAMIT% ls /home/tajimura/GAMIT/com/sh_steup
/home/tajimura/GAMIT/com/sh_setup
tajimura/GAMIT% sh_setup
sh_setup: Command not found.
tajimura/GAMIT% sh sh_setup
sh: sh_setup: No such file or directory
tajimura/GAMIT% l /home/tajimura/GAMIT/com/sh_setup
-rwxr-xr-x 1 tajimura users 11109 Aug 20   2013 /home/tajimura/GAMIT/com/sh_setup

这是截图:

PS:此处使用 Opensuse 12.1。

添加:前 4 天我执行得很好,所以我想 hashbang 不是问题。但我不能保证工作站在我的会话之间没有重新启动,所以也许(只是可能) -noexec 是原因。但是,脚本位于我的硬盘主目录中,它不是可移动驱动器。

添加:sh_setup 的前五行:

    /home/tajimura% sed 5q /home/tajimura/GAMIT/com/sh_setup
    #!/bin/csh -f
    #
    #doc Check and setup the GAMIT tables directory
    #doc
    #

【问题讨论】:

文件夹GAMITcom 是否具有所需的文件系统权限? 1.告诉我们什么是 sh_setup 很确定sh sh_setup 失败了,因为您不在com 中。第一个(只是sh_setup)可能是sh_setup 是一个损坏的符号链接。 残酷的错误信息表明(t)csh正在使用中(其他shell在消息前加上shell,并给出不同的消息)。最大的可能性是sh_setup 所在的文件系统是用noexec 挂载的(例如,从一个随身碟)。如果您执行grep `stat --format=%m /home/tajimura/GAMIT/com/sh_setup` /proc/mounts,您可能会在该行中找到noexec。执行sudo mount -o remount,exec - <mountpoint>,文件应该是可执行的。 向我们展示您脚本的前 5 行 (sed 5q /home/tajimura/GAMIT/com/sh_setup)。它工作的时间和停止工作的时间之间发生了什么变化?发生了一些变化,即使你还不知道发生了什么,追踪它可能是至关重要的。您是否删除或重命名了任何内容? 【参考方案1】:

您的脚本 要么不可执行(使用 chmod +x sh_setup 使其如此)要么 在其 hash-bang 行(@987654322 的第一行)上指定了一个损坏的(不存在的)解释器@文件,以#!开头)。

您的 sh sh_setup 调用失败,因为它没有使用 $PATH 并且您在错误的目录中。

编辑:您的脚本显然是可执行的(起初我没有在您的屏幕截图中发现这一点),这给我们留下了一个可能不正确的解释器。

【讨论】:

【参考方案2】:

我发现了一个意想不到的问题解决方案。如果我在 bash 而不是 csh 下调用脚本,一切都很好。

【讨论】:

以上是关于终端无法运行存储在 PATH 目录中的 shell 脚本文件的主要内容,如果未能解决你的问题,请参考以下文章

'rails server'命令无法在终端中运行

sublime如何在终端运行python

ubuntu怎么执行python文件

Mac设置终端打开VScode

Ansible 中的全局修改 $PATH 无法在常规 Linux shell 中按预期工作

linux为啥总是找不到java命令