【问题标题】:Shell : ksh script with echo command not showing anythingShell:带有 echo 命令的 ksh 脚本不显示任何内容
【发布时间】:2019-03-08 20:40:02
【问题描述】:

正如我的标题所暗示的那样,我猜我是 shell 的初学者,但我遇到了一个我无法解决的问题。

我在 Notepad++ 中输入我的脚本,并小心翼翼地删除了 CR。我在 PuttY 中执行我的脚本,即使它有一个 echo 命令,它也没有显示任何内容。我猜错误是我的脚本,但我不知道在哪里,因为 PuttY 没有显示任何错误。

脚本:

for ((i=wc -l <ListeTableFicToLoadRetour.lst; i>=0; i-=1)) 
do 
  echo ${i} 
done

wc命令单独运行,显示文件中有2行是正确的。

当我在 PuttY 中输入脚本时: devfic@psd949(DEV/DEV):/projets/dstage/d_fic/home/devfic/sh>test.ksh devfic@psd949(DEV/DEV):/projets/dstage/d_fic/home/devfic/sh>

如果是傻瓜的错误,我很抱歉,我几天前才开始使用ksh:/

【问题讨论】:

  • 您希望将变量 i 设置为 wc 命令的 输出。现在变量 i 被设置为 wc,重定向输入被忽略。在 wc -l 周围加上反引号
  • @LewisM,$(...) 比反引号更好——反引号不能很好地嵌套,$( ) 不仅在 ksh 中受支持,而且在所有 POSIX 兼容的 shell 中都受支持。
  • 反引号和 altgr+7 反引号一样吗?我试过了,它也不起作用:(
  • 我建议您运行带有日志记录的脚本——例如,ksh -x test.ksh,因此它实际上会在执行时向您显示每一行。
  • 顺便说一句,请注意,除非您的系统在 PATH 中配置了 .,否则仅运行 test.ksh 不应该工作——这种做法存在一些重大安全问题.理论上,你应该需要添加一个shebang,比如#!/usr/bin/env ksh,作为脚本的第一行;使用chmod +x test.ksh 使其可执行,并限定路径(如./test.ksh 以指定在当前目录中找到的shell)或将脚本安装在PATH 变量中的某个位置。

标签: shell echo ksh


【解决方案1】:

wc -l &lt;ListeTableFicToLoadRetour.lst需要被执行:

for ((i=$(wc -l <ListeTableFicToLoadRetour.lst); i>=0; i-=1)) 
do 
  echo ${i} 
done

【讨论】:

  • 我尝试使用 $(...) 但也不起作用,仍然没有输出:(
猜你喜欢
  • 1970-01-01
  • 2020-05-23
  • 2023-03-20
  • 1970-01-01
  • 2012-01-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-03-22
相关资源
最近更新 更多