为什么我不能在UNIX中执行命令文件?

时间:2016-04-12 15:14:15

标签: shell unix

我是UNIX和shell编程的新手。我正在尝试使用chmod命令使命令行文本文件可执行。

以下是代码:

$ls
a  aa  aba  chapt1  chapt2  chapt3  newprog
$filename=ch
$cat newprog
echo a?* n* ${filename}*
$chmod +x newprog
$ls -l newprog
-rwxr-xr-x 1 xxxxx xxxxx 25 Apr 12 09:50 newprog

但是当我通过

执行newprog时
newprog

我得到了

newprog: command not found

我使用vi命令创建newprog并使用putty。 哪个部分我做错了?

感谢Benjamin W.通过使用./newprog,该文件是可执行的。

但结果是

aa aba newprog a aa aba chapt1 chapt2 chapt3 newprog

我认为我期望的结果是

aa aba newprog chapt1 chapt2 chapt3

为什么会出现重复?

1 个答案:

答案 0 :(得分:2)

出于安全原因,UNIX不直接在当前目录中执行文件,而只是从PATH中找到的目录执行。这是为了避免攻击,其中某人将与常用命令同名的恶意可执行文件放入可写目录,并希望有人以他的权利执行它。出于同样的原因,您也不应将var str = 'hello Hello'; var count = {}; str.split('').forEach(function(v) { if (v === ' ') return; v = v.toLowerCase(); count[v] = count[v] ? count[v] + 1 : 1; }) console.log(count); 放入PATH。

如果您确定要执行此类文件,请使用.

回答扩展问题:由于未导出文件名,脚本看到的值为空。因此,最后一个模式./filename匹配所有文件(不以点开头)。

要获得预期的结果,请*(这告诉shell将文件名变量放入给予子进程的环境中)并再次运行脚本。