【发布时间】: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到它们。现在没关系!