Linux Can';";触摸“;包含句点的参数中的文件
我正在尝试使用shells脚本为qemu launcher(我尝试过的4个qemu GUI中唯一一个对我有效的)创建配置文件,这是一个一步的过程,但无法理解如何将命令行参数传递给“touch”命令 我的控制台输入是Linux Can';";触摸“;包含句点的参数中的文件,linux,bash,Linux,Bash,我正在尝试使用shells脚本为qemu launcher(我尝试过的4个qemu GUI中唯一一个对我有效的)创建配置文件,这是一个一步的过程,但无法理解如何将命令行参数传递给“touch”命令 我的控制台输入是config hello.iso 到目前为止,我的剧本是: #!/bin/sh touch $1 它不会创建文件。我尝试过创建一个等于$1的变量,然后使用它,但仍然没有得到响应。我尝试了双引号和单引号中的$1;使用double时,我什么也得不到,而使用single时,结果文件名是1
config hello.iso
到目前为止,我的剧本是:
#!/bin/sh
touch $1
它不会创建文件。我尝试过创建一个等于$1
的变量,然后使用它,但仍然没有得到响应。我尝试了双引号和单引号中的$1
;使用double时,我什么也得不到,而使用single时,结果文件名是1
但是,如果我只传递参数justhello
,则会创建具有该名称的文件,但我需要扩展名以用于其他内容
不可能这样做吗?还是我不明白
我真正想做的是获取参数并从中删除
.iso
,然后将其用作文件名,但我非常确定我可以使用grep正向前瞻来实现这一点。如果使用bash而不是sh:
#! /bin/bash
myVar=$1
touch ${myVar%.iso}
我会做好的。“%”后面的字符串将从变量内容的末尾剥离。
要使用当前版本的脚本获取更多信息,请尝试以下操作:
- 重命名脚本-不要使用“配置”
- 通过“回声”更改“触摸”
- 将脚本的输出重定向到文件
- 使用以下命令查看输出的内容: od-一个myOutputof脚本
/bin/bash
不会解决此问题,因为bash和sh在以下语法中完全重叠:
#!/bin/sh
touch "$1"
一些需要检查/尝试的事项:
chmod+x config打开执行权限
/config hello.iso
的形式运行它,否则请使用其完整路径名(仅示例)/home/your username/bin/config hello.iso
,具体取决于脚本的放置位置触摸“$1”
行上方添加set-x
,以查看调试跟踪#--eof
。在大多数现代外壳中,这不太可能是一个问题config
的系统命令。运行键入config
进行检查。我建议为脚本选择一个更具体的名称,以降低这种冲突的可能性
如果您有一个工作脚本(可能有更好的名称),通常会将其放在主目录中名为bin
的目录中,然后确保该目录的名称位于PATH
环境变量中。查看env
,为路径添加缺少的目录会因shell和口味而异,~/.bashrc
是最常见的地方(尽管技术上受到限制),而~/.bash\u登录
,~/.bash\u配置文件
或~/.profile
通常更好,但对于新用户来说更棘手。在所有这些目录中,~
指的是您的主目录
典型路径:
$ env | grep PATH
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
脚本编写者通常喜欢的内容(假设此处名为scripter
):
此用户本应将您的
配置
脚本放入/home/scripter/bin/config
-但选择了不同的名称;-) 你的脚本在cygwin Windows XP中为我工作。Dot已通过我使用的是最新的Linux Mint。如果您使用触摸“$1”
(注意引号),会发生什么情况。如果这也不起作用,请尝试触摸--“$1”
。如果这不起作用,那么请使用echo“$1”
,并在这里发布输出。我在第一篇文章中说过,使用双引号不会创建任何文件。添加双破折号没有任何作用。echo$1
和echo“$1”
echohello.iso
。您确定调用的脚本正确吗?它是否在$PATH环境变量中?(我假设您使用配置hello.iso
而不是/config hello.iso
调用它后,将它放在$PATH的目录中)哪个配置的输出是什么?
$ env | grep PATH
PATH=/home/scripter/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin