Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux Can';";触摸“;包含句点的参数中的文件_Linux_Bash - Fatal编程技术网

Linux Can';";触摸“;包含句点的参数中的文件

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

我正在尝试使用shells脚本为qemu launcher(我尝试过的4个qemu GUI中唯一一个对我有效的)创建配置文件,这是一个一步的过程,但无法理解如何将命令行参数传递给“touch”命令

我的控制台输入是
config hello.iso

到目前为止,我的剧本是:

#!/bin/sh

touch $1
它不会创建文件。我尝试过创建一个等于
$1
的变量,然后使用它,但仍然没有得到响应。我尝试了双引号和单引号中的
$1
;使用double时,我什么也得不到,而使用single时,结果文件名是
1

但是,如果我只传递参数just
hello
,则会创建具有该名称的文件,但我需要扩展名以用于其他内容

不可能这样做吗?还是我不明白


我真正想做的是获取参数并从中删除
.iso
,然后将其用作文件名,但我非常确定我可以使用grep正向前瞻来实现这一点。

如果使用bash而不是sh:

#! /bin/bash

myVar=$1
touch ${myVar%.iso}
我会做好的。“%”后面的字符串将从变量内容的末尾剥离。 要使用当前版本的脚本获取更多信息,请尝试以下操作:

  • 重命名脚本-不要使用“配置”
  • 通过“回声”更改“触摸”
  • 将脚本的输出重定向到文件
  • 使用以下命令查看输出的内容:

    od-一个myOutputof脚本

或者。。。 使用

bash-x myScript hello.iso>output.txt

您所拥有的(带双引号的变体)是正确的。更改为
/bin/bash
不会解决此问题,因为bash和sh在以下语法中完全重叠:

#!/bin/sh

touch "$1"
一些需要检查/尝试的事项:

  • 确保已使用
    chmod+x config打开执行权限
  • 如果您在目录中,请确保以
    /config hello.iso
    的形式运行它,否则请使用其完整路径名(仅示例)
    /home/your username/bin/config hello.iso
    ,具体取决于脚本的放置位置
  • 尝试在脚本中的
    触摸“$1”
    行上方添加
    set-x
    ,以查看调试跟踪
  • 在少数shell实现(特别是csh)中,如果脚本的最后一行没有换行符,那么它将被跳过。我通常只添加一条注释,如
    #--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”
    echo
    hello.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