此 CLI(命令行界面)脚本有效。
此脚本包含 688 个字符(含空格)。
此脚本显示:目录、文件、
当前目录中的总数以及
递归目录(沿文件/目录树向下)。
此脚本在 Ubuntu 20.04.3 上运行良好
clear ; ls -1v -w9 -plxhSs --format=single-column --group-directories-first ; cmd1=` ls -qp | grep -c / ` ; cmd2=` ls -qp | grep -vc / ` ; cmd3=` ls -1 | wc -l ` ; tput setaf 4 ; pwd | tr '\n' '\000' ; tput sgr0 ; echo "/" ; tput sgr0 ; printf "%9d%s" $cmd1 " dirs" $cmd2 " reg.files" $cmd3 " files current" | tr '\n' ' ' ; tput setaf 13 ; echo " Ctrl-c Cancel" ; sleep 1 ; cmd4=` find . -type d | wc -l ` ; cmd5=` find . -type f | wc -l ` ; cmd6=` find . | wc -l ` ; tput setaf 13 ; printf "%9d%s" $cmd4 " dirs" $cmd5 " reg.files" $cmd6 " files reclusive" ; echo " " ; tput setaf 13 ; pwd | tr '\n' '\000' ; tput sgr0 ; echo "/" | tr '\n' ' ' ; tput setaf 13 ; echo "+ recursive"
问题是:
- 当将上述脚本移动到别名时,它会在终端会话中中断。
- 上述脚本在移至 ~/.bashrc 时会中断
向 688 个字符的脚本中添加了 9 个字符,别名 a="
向 688 个字符的脚本中添加了 2 个字符,末尾处为 "。
11 个错误之一
bash: 别名: 目录 6: 未找到
仅供参考
为什么上面的错误是 6?
测试目录中有 6 个 reg.files。
alias a="clear ; ls -1v -w9 -plxhSs --format=single-column --group-directories-first ; cmd1=` ls -qp | grep -c / ` ; cmd2=` ls -qp | grep -vc / ` ; cmd3=` ls -1 | wc -l ` ; tput setaf 4 ; pwd | tr '\n' '\000' ; tput sgr0 ; echo "/" ; tput sgr0 ; printf "%9d%s" $cmd1 " dirs" $cmd2 " reg.files" $cmd3 " files current" | tr '\n' ' ' ; tput setaf 13 ; echo " Ctrl-c Cancel" ; sleep 1 ; cmd4=` find . -type d | wc -l ` ; cmd5=` find . -type f | wc -l ` ; cmd6=` find . | wc -l ` ; tput setaf 13 ; printf "%9d%s" $cmd4 " dirs" $cmd5 " reg.files" $cmd6 " files reclusive" ; echo " " ; tput setaf 13 ; pwd | tr '\n' '\000' ; tput sgr0 ; echo "/" | tr '\n' ' ' ; tput setaf 13 ; echo "+ recursive" "
问题:
使上述
CLI 脚本作为别名工作的纠正措施是什么?
--
答案1
同意 Kamil 的观点:此代码包含单引号和双引号。如果您试图将其强制转换为别名,您将会经历引号地狱。使用一个函数,您可以以合理、可读的方式格式化命令:
a() {
local cmd1 cmd2 cmd3 cmd4 cmd5 cmd6
clear
ls -1v -w9 -plxhSs --format=single-column --group-directories-first
cmd1=$( ls -qp | grep -c / )
cmd2=$( ls -qp | grep -vc / )
cmd3=$( ls -1 | wc -l )
tput setaf 4
pwd | tr '\n' '\000'
tput sgr0
echo "/"
tput sgr0
printf "%9d%s" $cmd1 " dirs" $cmd2 " reg.files" $cmd3 " files current" | tr '\n' ' '
tput setaf 13
echo " Ctrl-c Cancel"
sleep 1
cmd4=$( find . -type d | wc -l )
cmd5=$( find . -type f | wc -l )
cmd6=$( find . | wc -l )
tput setaf 13
printf "%9d%s" $cmd4 " dirs" $cmd5 " reg.files" $cmd6 " files reclusive"
echo " "
tput setaf 13
pwd | tr '\n' '\000'
tput sgr0
echo "/" | tr '\n' ' '
tput setaf 13
echo "+ recursive"
}