我正在尝试执行存储在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
答案 0 :(得分:4)
这一行有两个问题:
for fl in $dir
$ PATH以冒号分隔,但for
需要以空格分隔的值。您可以通过设置IFS
变量来更改它。这会更改for
和awk
等工具使用的FIELD SEPARATOR。
$fl
包含您要执行的文件的名称,但您使用$ dir的内容覆盖其值。
修正:
#!/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 ; }