csh错误:HOSTTYPE:未定义的变量

时间:2012-02-11 06:47:37

标签: shell csh

我想从this app运行Volume Library的pvm2raw实用程序。

在我的Ubuntu 10.10终端上输入csh build.sh tools时出现以下错误:

enter image description here

为什么会这样?

4 个答案:

答案 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中没有定义变量,这就不足为奇了。

另请参阅:Detect the OS from a Bash script

答案 3 :(得分:0)

我也遇到过类似的问题。

尝试:: tcsh build.sh