您所拥有的(带有双引号的变体)是正确的。更改为/bin/bash
不会解决此问题,因为 bash 和 sh 对于此语法完全重叠:
#!/bin/sh
touch "$1"
需要检查/尝试的一些事情:
- 确保您已打开执行权限
chmod +x config
- 确保您像在它所
./config hello.iso
在的目录中一样运行它,或者使用它的完整路径名(仅作为示例),/home/your-username/bin/config hello.iso
具体取决于您放置脚本的位置。
- 尝试在脚本
set -x
的行上方添加一个touch "$1"
以查看调试跟踪。
- 在少数 shell 实现(尤其是 csh)中,如果脚本末尾没有换行符,则将跳过脚本的最后一行。我通常只是添加一个评论,比如
#---eof
。这在大多数现代 shell 中不太可能成为问题。
config
您的路径中可能已经调用了一个系统命令。跑去type config
检查。我建议为脚本选择一个更具体的名称,以降低这种碰撞的几率。
如果您有一个工作脚本(可能有一个更好的名称),通常会将其放在bin
您的主目录中命名的目录中,然后确保该目录的名称在您的PATH
环境变量中。检查env
,向 PATH 添加缺少的目录因 shell 和口味而异,~/.bashrc
是最常见的地方(尽管在技术上有限),并且~/.bash_login
, ~/.bash_profile
, 或~/.profile
对于新用户来说通常更好但更棘手。在所有这些中,~
指的是您的主目录。
一个典型的路径:
$ env | grep PATH
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
脚本编写者通常喜欢的内容(假设此处命名为scripter
):
$ env | grep PATH
PATH=/home/scripter/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
该用户会将您的config
脚本放入/home/scripter/bin/config
- 但选择了不同的名称 ;-)