Bash 如何执行位于$PATH中的文件
我正试图从存储在我的Bash 如何执行位于$PATH中的文件,bash,shell,ubuntu,Bash,Shell,Ubuntu,我正试图从存储在我的~/Desktop的脚本中执行存储在~/bin的hello\u word.sh。我已使这两个脚本都可执行。但一直以来我都得到了问题的信息。有什么想法吗 #!/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=====>"
~/Desktop
的脚本中执行存储在~/bin
的hello\u word.sh
。我已使这两个脚本都可执行。但一直以来我都得到了问题的信息。有什么想法吗
#!/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
这条线有两个问题:
for fl in $dir
要求以空格分隔的值。您可以通过设置IFS
变量来改变这一点。这将更改for
和awk
等工具使用的字段分隔符
$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"
这条线有两个问题:
for fl in $dir
要求以空格分隔的值。您可以通过设置IFS
变量来改变这一点。这将更改for
和awk
等工具使用的字段分隔符
$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"
你也可以懒惰,让一个子shell来处理它
PATH=(whatever) bash command -v my_command
if [ $? -ne 0 ]; then
# Problem, could not be found.
else
# No problem
fi
没有必要把事情复杂化
command(1)是一个内置命令,允许您检查命令是否存在。您也可以懒惰,让子shell处理它
PATH=(whatever) bash command -v my_command
if [ $? -ne 0 ]; then
# Problem, could not be found.
else
# No problem
fi
没有必要把事情复杂化
命令(1)是一个内置命令,允许您检查命令是否存在。路径值包含可执行文件在其中运行而无需显式限定的所有目录。所以你可以直接调用命令
#!/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 ; }
我引用这个名字,因为它可能有空格
要在执行之前测试命令是否存在,请使用-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 ""
type -p "$fq" >/dev/null || exit 1
"$fl" || { echo "Problem" ; exit 1 ; }
路径值包含可执行文件在其中运行而无需显式限定的所有目录。所以你可以直接调用命令
#!/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 ; }
我引用这个名字,因为它可能有空格
要在执行之前测试命令是否存在,请使用-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 ""
type -p "$fq" >/dev/null || exit 1
"$fl" || { echo "Problem" ; exit 1 ; }
您可能希望通过解释IFS分隔符变量以及为什么它对该脚本的工作如此重要来改进答案。您可能希望通过解释IFS分隔符变量以及为什么它对该脚本的工作如此重要来改进答案。您应该使用
~/bin
或$HOME/bin
来代替/bin
,与/Desktop
类似,您是否应该使用~/bin
或$HOME/bin
代替/bin
,与/Desktop
类似?