【问题标题】:Throw error when I run in my shell script but run successfully in terminal console当我在我的 shell 脚本中运行但在终端控制台中成功运行时抛出错误
【发布时间】:2019-07-19 23:47:09
【问题描述】:

我正在使用 MacOS。为什么我可以在控制台运行我的命令,而不能在 shell 中运行?

命令是:

/usr/local/fsl/bin/fast "test.nii.gz"

/usr/local/fsl/bin/fast是一个预处理神经图像的软件。官方文档在FAST docs

这是我的 shell 脚本:

#!/bin/sh
/usr/local/fsl/bin/fast "test.nii.gz"

这是终端中的命令:

/usr/local/fsl/bin/fast "test.nii.gz"

它们完全一样。 但是 shell 脚本会抛出这样的错误:

/Users/weiziyang/study/Final_Project/code/auto-seg.sh: line 2:  9502 Segmentation fault: 11  /usr/local/fsl/bin/fast "test.nii.gz"

我希望它运行成功!

【问题讨论】:

  • 您的fast 二进制文件可能正在使用一些环境变量。一个普通的终端在你的环境中运行。控制台可能以 root 或其他用户身份运行。使用env 打印每个shell 中的环境并进行比较。
  • 另一种可能是您的脚本的 shebang 是 #!/bin/sh 而不是 #!/usr/bin/bash#!/usr/bin/env bash/bin/sh 可能正在运行 ksh 或某些仅 POSIX 或受限 shell,而您的终端会话运行 Bash shell。
  • @GaryO 如果是env的问题,如何解决?
  • 如果缺少 env 的 shell 是它崩溃的那个,那么执行 export VAR=proper-value 来设置 var。那么它不应该崩溃。
  • @GaryO 很好,我将 env 值复制到 bash 脚本并添加 export 到它们。现在没关系!

标签: linux bash macos shell


【解决方案1】:

(从原来是正确猜测的评论中粘贴) 您的快速二进制文件可能正在使用一些环境变量。一个普通的终端在你的环境中运行。控制台可能以 root 或其他用户身份运行。使用 env 打印每个 shell 中的环境并进行比较。

【讨论】:

    猜你喜欢
    • 2021-11-03
    • 2019-12-22
    • 1970-01-01
    • 1970-01-01
    • 2013-08-11
    • 2012-11-18
    • 2019-12-11
    • 2010-10-18
    • 2017-12-29
    相关资源
    最近更新 更多