答案 0 :(得分:3)
您是否有使用.sh
启动csh
文件的说明?
虽然没有必要使用.csh
命名csh脚本,但.sh
文件通常意味着Bourne或bash shell脚本。
此外,您的脚本名称意味着构建过程。构建通常使用默认shell完成,在旧的unix系统(如Solaris,AIX,HP和其他系统)上使用Bourne(sh
),对于Linux使用bash
。
您应该能够在build.sh
之前运行$?varName
而不使用任何外壳(除非您自己编写了脚本或已经给出了相关说明)。
Jonathan Leffler所说的一切都是真的。我想补充一点,csh允许使用'notation'if ( ! $?HOSTNAME ) then
setenv HOSTNAME `hostname`
endif
的空变量,可以像
build.sh
那么,你是写了source $HOME/.env_file
还是使用提供的脚本?
如果您编写了自己的csh脚本,请使用代码块检查并为所有变量提供默认值。 (还有其他方法可以实现这一点,例如$HOME/.env_file
,你需要创建一个列出脚本所需的所有变量赋值的#!/bin/bash
。
如果您使用的是提供的脚本,则Ubuntu 上的非常类似于它实际上是一个bash脚本。查看该脚本的第一行,是否说ls -l build.sh
(或类似),如果是,确认脚本设置为执行,-rwxr-xr-x
,您需要查看chmod 755 build.sh
之类的内容在线的前面,'x是关键位。如果没有,那么./build.sh
将解决这个问题。权限允许执行后,只需运行{{1}}。
我希望这会有所帮助。
答案 1 :(得分:2)
C Shell不希望您引用未定义的变量。因此,您需要在运行脚本之前设置$HOSTTYPE
,或修复脚本以便正确确定$HOSTTYPE
。
Bourne shell和派生词在大多数情况下将未定义的变量视为空字符串。
建议:不要使用C Shell进行编程。请参阅:Csh Programming Considered Harmful。
答案 2 :(得分:1)
HOSTTYPE
是非POSIX Bash扩展程序
它在man bash
中有记录,我们可以确认POSIX没有通过下载和grepping来提及它:Is there a listing of the POSIX API / functions?
因此,csh
中没有定义变量,这就不足为奇了。
答案 3 :(得分:0)
我也遇到过类似的问题。
尝试:: tcsh build.sh