cp:找不到命令

时间:2014-08-13 08:52:39

标签: linux bash signals cp bash-trap

我正在尝试将一个文件复制到其他目录,并在调用中断时收到错误消息。

剧本:

#!/bin/bash


PATH=~/MkFile/

exitfn () {
    trap SIGINT              # Resore signal handling for SIGINT
        echo ; echo 'Called ctrl + c '    # Growl at user,

        cp ./BKP/temp.txt $PATH/backup.txt
            exit                     #   then exit script.
}

trap "exitfn" INT            # Set up SIGINT trap to call function.ii



    read -p "What? "

    echo "You said: $REPLY"
# reset all traps## 


    trap - 0 SIGINT

输出:

./signal.sh
What? ^C
Called ctrl + c
./signal.sh: line 9: cp: command not found

你知道这个剧本有什么问题吗?

2 个答案:

答案 0 :(得分:12)

您修改了PATH变量的原因。也许您只想添加另一条路径:

PATH=$PATH:~/MkFile/

或者如果在Bash中,只需使用追加运算符:

PATH+=:~/MkFile/

想想看,我不认为你真的想要使用PATH变量。只需使用其他参数名称:

DIR=~/MkFile/

有些人会建议使用小写字母以避免与内置shell变量发生冲突:

path=~/MkFile/

从手册:

PATH    A colon-separated list of directories in which the shell looks for
        commands.  A zero-length (null) directory name in the value of PATH
        indicates the current directory. A null directory name may appear
        as two adjacent colons, or as an initial or trailing colon.

答案 1 :(得分:6)

在Linux中,$ PATH是一个环境变量,它包含搜索可执行文件的目录(例如参见http://www.linfo.org/path_env_var.html)。

我真的不知道你的目的是改变PATH变量。如果是,你应该遵循konsolebox的答案,但如果没有,你应该避免在你的脚本中使用环境变量作为变量。请尝试使用:

路径=〜/ MkFile /

mypath中=〜/ MkFile /