如何执行位于$ PATH中的文件

时间:2015-11-08 21:31:54

标签: bash shell ubuntu

我正在尝试执行存储在hallo_word.sh的此脚本~/bin存储的~/Desktop。我已经使这两个脚本可执行。但是我一直收到问题消息。有什么想法吗?

#!/bin/sh

clear
dir="$PATH"
read -p "which file you want to execute" fl
echo ""
for fl in $dir
do
    if [ -x "$fl" ]
    then
        echo "executing=====>"
        ./$fl
    else
        echo "Problem"
    fi
done

3 个答案:

答案 0 :(得分:4)

这一行有两个问题:

for fl in $dir
  1. $ PATH以冒号分隔,但for需要以空格分隔的值。您可以通过设置IFS变量来更改它。这会更改forawk等工具使用的FIELD SEPARATOR。

  2. $fl包含您要执行的文件的名称,但您使用$ dir的内容覆盖其值。

  3. 修正:

    #!/bin/sh
    
    clear
    read -p "which file you want to execute" file
    echo
    IFS=:
    for dir in $PATH ; do  
        if [ -x "$dir/$file" ]
        then
            echo "executing $dir/$file"
            exec "$dir/$file"
        fi
    done
    echo "Problem"
    

答案 1 :(得分:0)

你也可能很懒,让子shell处理它。

PATH=(whatever) bash command -v my_command
if [ $? -ne 0 ]; then
   # Problem, could not be found.
else
   # No problem
fi

没有必要使事情过于复杂。

command(1)是一个内置命令,允许您检查命令是否存在。

答案 2 :(得分:0)

PATH值包含可以在没有显式限定条件的情况下运行可执行文件的所有目录。所以你可以直接调用命令。

http://www.example.com/Main/Subject/Science

我引用了名称,因为它可以有空格。

要在执行前测试命令是否存在,请使用-p

#!/bin/sh

clear
# r for raw input, e to use readline, add a space for clarity
read -rep "Which file you want to execute? " fl || exit 1
echo ""
"$fl" || { echo "Problem" ; exit 1 ; }