【问题标题】:How to ignore the ./ characters in the file location?如何忽略文件位置中的 ./ 字符?
【发布时间】:2013-11-19 11:15:17
【问题描述】:

我运行以下命令来获取 .sh 文件的位置并将其存储在变量中:

startupfile=`find . -name "startup.sh"`

上面的结果是:

./server1/bin/startup.sh

下一步是运行startup.sh 文件。

当我尝试sh $startupfile 时,它无法运行服务器。

有没有办法忽略位置值中的./?运行 startup.sh 脚本的任何其他方式。

【问题讨论】:

  • 为什么“忽略./”会有帮助?
  • 是我,还是编辑修复了这个错误?
  • @ams 除了格式之外,编辑没有改变任何东西。
  • “无法运行服务器”是什么意思?你遇到了什么错误?您是否可能需要使用bash "$startupfile" 而不是使用sh
  • @devnull,你的没有,但第一次编辑添加了反引号。

标签: bash shell


【解决方案1】:

你应该使用:

startupfile=$(find . -name "startup.sh")

或者在 BASH 中不太受欢迎:

startupfile=`find . -name "startup.sh"`

这叫command substitution

更新::发布问题编辑:

为避免使用完整路径运行脚本,您可以将 startup.sh 的路径放在您的 PATH 变量中,因此在您的 ~/.bashrc 中添加类似这样的内容:

 export PATH=$PATH:~/server1/binripts

然后就可以运行了:

startup.sh

从您的主目录的任何位置。

【讨论】:

    【解决方案2】:

    ./ 是无害的。

    你还有一个问题。您是否在两个命令之间更改了目录? “脚本”实际上不是有效的脚本吗?

    【讨论】:

      【解决方案3】:

      ./ 不是问题,它只是当前目录的(多余)路径:./file././././file 都是当前目录中file 的有效路径,前导@ 的数量987654325@'s 没有任何区别。

      查看原始问题的来源(在对其进行编辑以获得更好的格式之前),命令周围有单引号 ''sh $startupfile'。如果您在实际命令中也有这些,那是您的问题;命令应该是:sh "$startupfile"

      除此之外,很难说可能是什么问题。检查echo "$startupfile" 是否显示正确的路径并且显示正确的路径。如果是,sh ./server1/bin/startup.sh 有效吗?如果不是,错误是什么?

      【讨论】:

      • 'sh ./server1/bin/startup.sh' 不起作用。它是一个服务器启动文件。服务器无法启动。我希望命令是 'sh /server1/bin/startup.sh'
      • @DeeptiK 即使没有 ' 引号?那么sh server1/bin/startup.sh 是否有效,或者您为什么认为./ 有问题? ls -l server1/bin/startup.sh 说什么,文件是否存在,你是否有读取权限?
      【解决方案4】:

      回答您的具体问题:

      有没有办法忽略位置值中的./?

      有几种方法可以去除前导目录名称。最有效但最晦涩的方法是:

      startupfile=${startupfile##*/}
      

      这将删除左侧以“/”结尾的最长字符串。第二种方式更明显一些,但涉及到创建一个子进程:

      startupfile=$(basename "$startupfile")   
      

      运行 startup.sh 脚本的任何其他方式。

      是的,正如@anubhava 所说,您可以使用PATH 环境变量。我唯一要补充的是您需要对脚本执行访问权限; chmod u+x "$startupfile".

      但是,名称“startupfile”的含义是它正在进行某种初始化,在这种情况下,您可能需要使用source 或@ 在相同 进程中运行它987654326@(dot) 命令:

      source "$startupfile"
      

      您可能仍需要文件名中的路径,或更新PATH

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-07-14
        • 1970-01-01
        • 2019-02-12
        • 2014-01-25
        • 1970-01-01
        • 1970-01-01
        • 2021-02-12
        • 1970-01-01
        相关资源
        最近更新 更多