命令cd行为
从ubuntu 17.10开始,我的脚本的工作方式与以前不同:
cd a*
将目录更改为以a
开头的第一个目录。 现在,我收到此错误:
bash: cd: too many arguments
我猜它现在检测到多个参数,因为多个目录以a
开头并引发错误。 我怎么能改变cd
的行为方式?
我发现了同样的问题: Ubuntu 17.04 – bash:cd:参数太多了 。 显然这是一个错误。
建议的解决方法是创建一个基于内置cd
命令的函数来覆盖它的行为:
cd(){ builtin cd "${@:1:1}"; }
将上面的行放在脚本的开头,然后在Ubuntu 16.04中使用cd a*
。 如果要在子shell中使用它,请使用export -f cd
。
您也可以在~/.bashrc
文件中定义和导出该函数:
cd(){ builtin cd "${@:1:1}"; } export -f cd
这看起来像Bash中的一个错误:每个man builtins
的旧行为是正确的。
cd [-L|[-P [-e]] [-@]] [dir] Change the current directory to dir. if dir is not supplied, the value of the HOME shell variable is the default. Any additional arguments following dir are ignored.
您可以在bug-bash
邮件列表中报告错误; 更多细节在这里 。
实际上,报告了这个错误(很久以前)。 如果你现在想要一个固定的Bash,现在, 现在 ,这里是如何正确地做到这一点(在17.10上测试,也应该在其他人上工作)。
首先创建一个工作目录,例如:
mkdir ~/bash cd ~/bash
获取源包和构建依赖项:
apt-get source bash sudo apt-get build-dep bash cd bash-4.4
编辑config-top.h
来改变它(应该是第32行)
#define CD_COMPLAINS
对此
/* #define CD_COMPLAINS */
编辑debian/changelog
并在顶部添加这样的条目(您也可以使用命令dch -i
):
bash (4.4-5ubuntu1+cd) artful; urgency=medium * Fix cd. -- Firas Kraiem Thu, 04 Jan 2018 21:11:22 +0900
最重要的一点是将+foo
附加到当前版本号( foo
可以是任何小写字母的字符串;如果使用dch -i
,请小心,它会增加最后一个数字,因此您需要将其恢复为当前版本号一)并使用正确的版本名称(这里是artful
)。 最后,运行dpkg-source --commit
。
然后你可以运行debuild
命令,如果一切顺利(可以忽略有关debsign
错误)你应该在父目录中有一些.deb
,你可以照常安装(没有必要安装所有这些,只是你现在拥有的;使用dpkg -l | grep bash
来查找)。
请注意,新软件包的版本号已设置,以便您将自动获得bash
任何更新。 如果更新无法解决问题,则必须重复上述过程。