Bash 定制";cd";在狂欢节上
我只是觉得把cd放到我存储文件的目录里比较方便Bash 定制";cd";在狂欢节上,bash,alias,cd,Bash,Alias,Cd,我只是觉得把cd放到我存储文件的目录里比较方便 [admin@local /]$ cd /usr/bin/somefile.pl 据我所知,官方的“cd”命令不起作用 所以我写了这样的东西: main () { if [[ "${1}" =~ "(.+/)*(.*){1}" ]] && [ -f "${1}" ] ; then `\cd ${1%/*}` elif [ -f "${1}" ] ; then exit
[admin@local /]$ cd /usr/bin/somefile.pl
据我所知,官方的“cd”命令不起作用
所以我写了这样的东西:
main () {
if [[ "${1}" =~ "(.+/)*(.*){1}" ]] && [ -f "${1}" ] ; then
`\cd ${1%/*}`
elif [ -f "${1}" ] ; then
exit 0
else ; `\cd ${1}`
fi
}
main ${1}
我将此cd.sh别名为“cd”命令:
这不管用
我尝试使用eval“\cd xxx”
,而不仅仅是\cd xxx
如何修复脚本?覆盖
cd
感觉不是个好主意,因此我建议使用稍微不同的命令,fcd
:
fcd() { cd -- "$(dirname -- "$1")"; }
$ fcd /usr/bin/somefile.pl
$ pwd
/usr/bin
或者使用参数展开保存对dirname
的调用:
fcd { cd -- "${1%/*}"; }
覆盖
cd
感觉不是个好主意,所以我建议使用稍微不同的命令,fcd
:
fcd() { cd -- "$(dirname -- "$1")"; }
$ fcd /usr/bin/somefile.pl
$ pwd
/usr/bin
或者使用参数展开保存对dirname
的调用:
fcd { cd -- "${1%/*}"; }
伙计,这是个好主意。但是,请使用
basename
来操作路径,而不是正则表达式。因为有时候我只想看到我正在查看的文件存储了哪些文件,当我知道该文件的abs路径时。伙计,这是个好主意。但是,请使用basename
来操作路径,而不是正则表达式。因为有时候我只想知道我正在查看的文件的abs路径时,看看它存储了哪些文件。他实际上没有重新定义cd
+1:需要一些额外的引号fcd(){cd“$(dirname“$1”);}
如果目录名包含空格。@user990106实际上,dirname也不理想——以这种方式使用它需要分叉一个子shell,并读取和解析它的stdout。您在原始版本中提供的参数扩展版本,${1%/*}
,效率更高。实际上,如果$1
以-
开头,您需要cd“$(dirname--“$1”)”
,请尝试fcd--help
Bash从来都不简单,是吗?:)我已经包括了andrew关于处理以“-”开头的参数的建议,并添加了Charles关于使用参数扩展来代替进程替代的建议。实际上,他没有重新定义cd
+1:如果目录名包含空格,则需要一些额外的引号fcd(){cd“$(dirname“$1”);}
。@user990106实际上,dirname也不理想——以这种方式使用它需要分叉子shell,并读取和解析其标准输出。您在原始版本中提供的参数扩展版本,${1%/*}
,效率更高。实际上,如果$1
以-
开头,您需要cd“$(dirname--“$1”)”
,请尝试fcd--help
Bash从来都不简单,是吗?:)我已经包括了andrew关于处理以“-”开头的参数的建议,并添加了Charles关于使用参数扩展来代替进程替代的建议。为什么要使用“$*”
?是否有任何情况下,使用多个命令行参数并将其与一个代码的第一个字符一起混入一个> $IFS < /COD>散布将是正确的行为?还考虑替换“<代码>”$(DrimeNo.$FoO)“参数扩展调用,即<代码>“${fo%/*}”。——这不需要子shell,因此性能会好得多。@CharlesDuffy the realcd
将其所有参数视为一个,谁在乎呢。如果您尝试cd一两
(不带引号)cd
将尝试cd到dir一两
(带空格)@KerzedMetal不在bash 4.2.10上,它不会。@KerzedMetal…另外,请注意cd一两
的情况;一个内置的语法,可以得到输入的实际文字命令,并确定空格的数量;函数不能,也不能区分一两
和一两
。因此,允许人们使用cd而不引用他们的参数列表只会导致混淆,无论何时发现IFS的多个元素彼此相邻,或者使用IFS的一个元素而不是第一个元素。为什么使用“$*”
?是否有任何情况下,使用多个命令行参数并将其与一个代码的第一个字符一起混入一个> $IFS < /COD>散布将是正确的行为?还考虑替换“<代码>”$(DrimeNo.$FoO)“参数扩展调用,即<代码>“${fo%/*}”。——这不需要子shell,因此性能会好得多。@CharlesDuffy the realcd
将其所有参数视为一个,谁在乎呢。如果您尝试cd一两
(不带引号)cd
将尝试cd到dir一两
(带空格)@KerzedMetal不在bash 4.2.10上,它不会。@KerzedMetal…另外,请注意cd一两
的情况;一个内置的语法,可以得到输入的实际文字命令,并确定空格的数量;函数不能,也不能区分一两
和一两
。因此,如果允许人们使用cd而不引用他们的参数列表,那么当发现IFS的多个元素彼此相邻或使用IFS的一个元素而不是第一个元素时,就会导致混乱。