【问题标题】:How this ksh code is working?这个 ksh 代码是如何工作的?
【发布时间】:2014-03-26 15:10:24
【问题描述】:
echo "Hello" > $XYZ

echo ${?}

如果我将这两行复制粘贴到任何 .sh 文件中,则脚本可以正常工作,没有任何问题。第二行中的 ${?} 返回 0。$XYZ 可以替换为任何随机字符串。该变量不需要定义或初始化。

但是,相同的代码不适用于某些用户。第一行抛出错误“scriptname.sh[425]: : cannot open”。

第二行的${?}返回1。

知道为什么同一段代码会为不同的用户提供不同的结果吗?

注意:我们在服务器“IBM/AIX RISC System/6000”中遇到了这个问题

【问题讨论】:

  • 没有“Linux 代码”之类的东西。你是说巴什吗?还是什么?
  • 所以这是一个 ksh 编程问题。请相应地修改标题和标签。谢谢
  • 我现在更正了标题。但是,我仍然没有得到我的问题的答案。 Korn shell 如何在不抛出任何错误消息的情况下执行该行?
  • 不同的用户可以有不同的shell吗?该脚本是否特别将#!/bin/ksh 作为其第一行?
  • 没有。所有用户都有相同的外壳。脚本的第一行是#!/bin/ksh

标签: linux redirect stdout ksh aix


【解决方案1】:

我会想象 AIX 中的不同用户无法访问日志文件 ($XYZ),尝试为日志文件目录提供 755,并确保您的文件有足够的权限被其他人执行(再次为 755)

【讨论】:

  • $XYZ 是一个随机的未定义变量。我可以用任何随机值($XEREOER、$DOREORLR、$EROEROERO 等)替换 $XYZ。脚本正在运行。我想了解为什么操作系统没有抛出错误。什么 Linux 设置抑制了错误?
  • 我会说你应该通过在字符串中定义日志名称来使用日志技术的通用方式..
【解决方案2】:

确保以正确的形式编写 XYZ 的赋值语句。例如:

XYZ="fileName"
echo "Hello" > $XYZ
...

XYZ="fileName" 没有空格。我不知道,但这是我想到的唯一问题

【讨论】:

  • 我明白,但我的问题不同。如果我执行命令“echo "Hello" > $RANDOM_STRING”,操作系统不会抛出任何错误。这里,$RANDOM_STRING 是未定义的随机变量。我想了解这是如何发生的。
【解决方案3】:

变量 XYZ 需要保存一个非空字符串,以便 shell 能够解析重定向。如果您希望它默认为没有结果,也许将其初始化为/dev/null(我想您可能希望重定向到什么都没有完成;但事实并非如此)。

【讨论】:

  • 刚才我通过执行以下命令进行了测试,一切运行良好,没有任何错误。 echo "Test" > $XROELRLER echo "Test" > $EROOTRTUEROOOROEOREOREORO echo "Test" > $OOEREMREOEREREOR echo "Test" > /dev/null 上述变量均未在任何位置定义。它们都是随机的名字。但是,我注意到在终端中打印了“Test”上方的前 3 行,但是对于我使用 /dev/null 的 4 行,没有打印字符串“Test”。如果变量为空,是否有任何 Linux 设置会忽略文件重定向?
猜你喜欢
  • 2010-12-13
  • 2013-04-23
  • 2015-04-09
  • 2013-07-24
  • 2012-11-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多