Bash 脚本输出命令未重复找到
Bash Script ouputs Command Not Found Repeatedly
我正在尝试创建一个 bash 脚本,它将一些 pacman 查询的输出写入文本文件,主要是本地安装了哪些包,作为依赖项安装的包,孤立的包,以及什么包需要什么依赖。目前,我正在解决一个问题,该问题阻止我编写哪些包需要哪些依赖项。我正在使用以下 bash 代码:
#!/bin/bash
set -e -u
#Switch to PWD
cd /home/$USER/System/scripts/pacman-queries-output/
#Get the current date
DATE=`date +%m%d%Y`
#Pacman Queries
pacman --query -e >pacman_installed$DATE.txt
pacman --query -d >pacman_dependencies$DATE.txt
pacman -Qdt >pacman_orphans$DATE.txt
while read package_desc
do
package_name=$(echo $package_desc| cut -d' ' -f 1)
check_if_none=$(pacman -Qi $package_name | grep "Req" | sed -e 's/Required By : //g')
if $check_if_none != "Required By : None"
then
echo $package_name >>pacman_required_by$DATE.txt
pacman -Qi $package_name | grep "Req" | sed -e 's/Required By : //g' >>pacman_required_by$DATE.txt
fi
done < $PWD/pacman_installed$DATE.txt
echo 'Completed 'basename
但是,while 循环似乎没有创建 and/or 写入我指定的文本文件,而是在终端中多次回显:
./pacman-queries.sh:第 20 行:必需:找不到命令
以下是 运行 bash -x pacman-queries.sh:
时显示的 while 循环迭代之一
+ read package_desc
++ echo aesfix 1.0.1-4
++ cut '-d ' -f 1
+ package_name=aesfix
++ pacman -Qi aesfix
++ grep Req
++ sed -e 's/Required By : //g'
+ check_if_none='Required By : None'
+ Required By : None '!=' 'Required By : None'
pacman-queries.sh: line 20: Required: command not found
任何人都可以提出他们可能必须解决此问题的任何解决方案吗?先感谢您。
if $check_if_none != "Required By : None"
如果 check_if_none 有字符串:
check_if_none="Required By : None"
然后扩展为:
if Required By : None != "Required By : None"
if
尝试执行传递给它的命令。所以它会尝试执行命令Required
。而且它没有找到这样的命令。
如何修复:
- 使用
test
[ .. ]
或[[ ... ]]
在bash 中做比较
- 总是引用你的变量
"$varvar"
if [ "$check_if_none" != "Required By : None" ]
还有:
- 不要使用反引号。它们的可读性较差,不能嵌套,并且是 deprecated.
修复后的脚本可能如下所示:
#!/bin/bash
set -e -u
#Switch to PWD
cd "/home/$USER/System/scripts/pacman-queries-output/"
#Get the current date
DATE=$(date +%m%d%Y)
#Pacman Queries
pacman --query -e >"pacman_installed$DATE.txt"
pacman --query -d >"pacman_dependencies$DATE.txt"
pacman -Qdt >"pacman_orphans$DATE.txt"
while IFS= read -r package_desc; do
package_name=$(echo "$package_desc" | cut -d' ' -f 1)
# renamed from check_if_none
# some newlines for readability
Required=$(
pacman -Qi "$package_name" |
grep "Req" |
sed -e 's/Required By : //g'
)
if [ "$Required" != "Required By : None" ]; then
echo "$package_name"
# runnung `pacman -Q` twice is just throwing cpu cycles...
echo "$Required"
fi
# All output goes into required_by - moved it here
# also changed `>>` into `>`
done < "$PWD/pacman_installed$DATE.txt" > "pacman_required_by$DATE.txt"
echo 'Completed 'basename
我正在尝试创建一个 bash 脚本,它将一些 pacman 查询的输出写入文本文件,主要是本地安装了哪些包,作为依赖项安装的包,孤立的包,以及什么包需要什么依赖。目前,我正在解决一个问题,该问题阻止我编写哪些包需要哪些依赖项。我正在使用以下 bash 代码:
#!/bin/bash
set -e -u
#Switch to PWD
cd /home/$USER/System/scripts/pacman-queries-output/
#Get the current date
DATE=`date +%m%d%Y`
#Pacman Queries
pacman --query -e >pacman_installed$DATE.txt
pacman --query -d >pacman_dependencies$DATE.txt
pacman -Qdt >pacman_orphans$DATE.txt
while read package_desc
do
package_name=$(echo $package_desc| cut -d' ' -f 1)
check_if_none=$(pacman -Qi $package_name | grep "Req" | sed -e 's/Required By : //g')
if $check_if_none != "Required By : None"
then
echo $package_name >>pacman_required_by$DATE.txt
pacman -Qi $package_name | grep "Req" | sed -e 's/Required By : //g' >>pacman_required_by$DATE.txt
fi
done < $PWD/pacman_installed$DATE.txt
echo 'Completed 'basename
但是,while 循环似乎没有创建 and/or 写入我指定的文本文件,而是在终端中多次回显:
./pacman-queries.sh:第 20 行:必需:找不到命令
以下是 运行 bash -x pacman-queries.sh:
时显示的 while 循环迭代之一+ read package_desc
++ echo aesfix 1.0.1-4
++ cut '-d ' -f 1
+ package_name=aesfix
++ pacman -Qi aesfix
++ grep Req
++ sed -e 's/Required By : //g'
+ check_if_none='Required By : None'
+ Required By : None '!=' 'Required By : None'
pacman-queries.sh: line 20: Required: command not found
任何人都可以提出他们可能必须解决此问题的任何解决方案吗?先感谢您。
if $check_if_none != "Required By : None"
如果 check_if_none 有字符串:
check_if_none="Required By : None"
然后扩展为:
if Required By : None != "Required By : None"
if
尝试执行传递给它的命令。所以它会尝试执行命令Required
。而且它没有找到这样的命令。
如何修复:
- 使用
test
[ .. ]
或[[ ... ]]
在bash 中做比较
- 总是引用你的变量
"$varvar"
if [ "$check_if_none" != "Required By : None" ]
还有:
- 不要使用反引号。它们的可读性较差,不能嵌套,并且是 deprecated.
修复后的脚本可能如下所示:
#!/bin/bash
set -e -u
#Switch to PWD
cd "/home/$USER/System/scripts/pacman-queries-output/"
#Get the current date
DATE=$(date +%m%d%Y)
#Pacman Queries
pacman --query -e >"pacman_installed$DATE.txt"
pacman --query -d >"pacman_dependencies$DATE.txt"
pacman -Qdt >"pacman_orphans$DATE.txt"
while IFS= read -r package_desc; do
package_name=$(echo "$package_desc" | cut -d' ' -f 1)
# renamed from check_if_none
# some newlines for readability
Required=$(
pacman -Qi "$package_name" |
grep "Req" |
sed -e 's/Required By : //g'
)
if [ "$Required" != "Required By : None" ]; then
echo "$package_name"
# runnung `pacman -Q` twice is just throwing cpu cycles...
echo "$Required"
fi
# All output goes into required_by - moved it here
# also changed `>>` into `>`
done < "$PWD/pacman_installed$DATE.txt" > "pacman_required_by$DATE.txt"
echo 'Completed 'basename