【发布时间】:2019-07-29 19:00:45
【问题描述】:
我创建了一个简单的 shell 脚本,它在同一目录中执行另一个 shell 脚本。在 cygwin 之外执行时,这两个脚本都可以正常工作,但是当我在 mintty 中执行文件时,我收到“没有这样的文件或目录”错误。
我尝试更改第一个执行的脚本中的行以通过. ./script2.sh 和./script2.sh 等几种方式访问第二个脚本,结果相同。
注意 1:我意识到有几个类似的问题,但似乎没有一个可以举例说明或解决我遇到的确切问题,至少不是我能够找到的。
注意 2:由于这些脚本将在多个用户之间分发和共享,因此我希望无需手动更改 PATH 设置即可解决此问题。
我的主脚本(称为 mainScript.sh)的原始形式(没有我尝试的任何更改)的内容如下:
#!/bin/bash
. script2.sh
我在 Windows 命令提示符下使用的完整命令是:
c:\path\to\mintty.exe -h always -e /cygdrive/C/Users/path/to/script/mainScript.sh
我在执行时收到此错误消息:
/cygdrive/C/Users/path/to/script/mainScript.sh: line 3: script2.sh: No such file or directory
【问题讨论】:
-
当您没有指定第二个脚本的路径时,shell 会在当前的 $PATH 中搜索它。如果您不想更改 $PATH,请指定
script2.sh的完整路径。 -
这不能使用我尝试过的相对路径
./script2.sh来完成吗?还是我错过了什么 -
相对路径是指相对于您运行脚本的位置,而不是它所在的位置。
-
我明白了。所以当我输入完整命令时,它会从我所在的任何目录中寻找 script2.sh 吗?在这种情况下 C:\Users?
-
@BlakeSimmons 是的。引用相对于脚本位置的文件实际上很困难(有时是不可能的/毫无意义的)。见BashFAQ #28。