【问题标题】:Execute relative path executable in bash script在 bash 脚本中执行相对路径可执行文件
【发布时间】:2012-03-28 19:23:46
【问题描述】:

我在谷歌上搜索了这个 senario,但它充斥着关于如何将相对路径转换为绝对路径的结果(这可行,但我觉得有更简单的方法)

我有以下场景:

$ls ../
executable1 dir1
$
$ls
shellscript1
$
$cat ./shellscript1
#!/bin/bash
#Run executable1, which I know is one dir up towards root
../executable1 arg1 arg2 arg3 etc
exit 0
#----End Of Script----
$
$./shellscript1
./shellscript1: line 3: ../executable1: No such file or directory

基本上我需要从 bash 脚本调用具有相对路径的可执行文件。它在 bash shell 中运行良好,但在脚本中无法解析路径。我已经验证了工作目录是我所期望的(例如 dir1)。我需要在它前面有一些callexec 之类的命令吗?我尝试了sh ../executable1,但当然 bash 对可执行文件感到困惑。

【问题讨论】:

  • 需要更多信息。当你测试这个时,你在哪里?输入密码。在 cat 之后我没有看到的一条信息是您正在运行的可执行文件1。试试看。它不应该工作。
  • 你的shell命令历史有一些问题:ls返回shellscript1,然后你cat shellscript,那不应该在那里,因为ls没有显示你......你得到了脚本。然后你调用了 ./shellscript (它不存在)。它打印了 ./shellscript1: line 3 ... 您的查询有问题。可以肯定 100% 的文件名有语法错误。仔细检查它是否在那里,不要假设它在那里。
  • 确保这些都不是符号链接。
  • @dAm2K 我概括了这个问题以使其更明显,我当然不会用数字命名我的脚本、目录等。
  • @pizza 可执行文件是我自己编译的,因此它是具有 rwx 权限的常规文件。我还编写了 shell 脚本,所以这不是符号链接。

标签: bash shell relative-path


【解决方案1】:

我刚刚测试了这个,它是基于你的信息,似乎工作得很好。

$ ls ../
dir1  executable1  executable1.c
$
$ cat ../executable1.c
#include <stdio.h>
int main(int argc, char ** argv) {
        while (*argv) {printf ("<%s> ",*argv++);}
        printf("\n");
        return 0;
}
$ cat ./shellscript1
$
#!/bin/bash
#Run executable1, which I know is up dir up towards root
../executable1 arg1 arg2 arg3 etc
exit 0
#----End Of Script----
$
$ ./shellscript1
<../executable1> <arg1> <arg2> <arg3> <etc>
$
$ ls -l ../ ./
./:
total 4
-rwxr-xr-x 1 pizza pizza 133 2012-03-29 00:19 shellscript1

../:
total 16
drwxr-xr-x 2 pizza pizza 4096 2012-03-29 00:24 dir1
-rwxr-xr-x 1 pizza pizza 6501 2012-03-29 00:20 executable1
-rw-r--r-- 1 pizza pizza  126 2012-03-29 00:20 executable1.c

【讨论】:

  • 我不知道我到底改变了什么,但它现在可以工作了。我为你的努力鼓掌,甚至编写了一个完整的模型。如果可以的话,我会给你另一个赞成票。 (也许我会找到你的另一个答案)
【解决方案2】:

可能是由于对 ..../executable1 的权限

执行./shellscript 的用户应该对..../executable1 具有执行权限。是吗?

【讨论】:

  • 否则会产生权限错误,不是吗:./l2: line 1: ../l1: Permission denied 但它是no such file or directory
  • 两者都存在于我的主目录下,所以无论我需要什么,我都有 rwx。
  • 这可能很棘手。如果您对 dir 没有 exec 权限,那么您将无法“看到”内部的任何内容,因此您会得到“没有这样的文件或目录”.. 同样(不是在这种情况下,但是)如果您对文件没有 exec 权限并且您尝试使用“file”而不是“./file”从它的目录执行文件,然后你会得到“no such command”..猜测味精可能取决于操作系统的风格..
猜你喜欢
  • 2013-05-28
  • 2019-06-24
  • 2014-07-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多