Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/364.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Bash 定制";cd";在狂欢节上_Bash_Alias_Cd - Fatal编程技术网

Bash 定制";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

我只是觉得把cd放到我存储文件的目录里比较方便

[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 real
cd
将其所有参数视为一个,谁在乎呢。如果您尝试
cd一两
(不带引号)
cd
将尝试cd到dir
一两
(带空格)@KerzedMetal不在bash 4.2.10上,它不会。@KerzedMetal…另外,请注意
cd一两
的情况;一个内置的语法,可以得到输入的实际文字命令,并确定空格的数量;函数不能,也不能区分
一两
一两
。因此,允许人们使用cd而不引用他们的参数列表只会导致混淆,无论何时发现IFS的多个元素彼此相邻,或者使用IFS的一个元素而不是第一个元素。为什么使用
“$*”
?是否有任何情况下,使用多个命令行参数并将其与一个代码的第一个字符一起混入一个> $IFS < /COD>散布将是正确的行为?还考虑替换“<代码>”$(DrimeNo.$FoO)“参数扩展调用,即<代码>“${fo%/*}”。——这不需要子shell,因此性能会好得多。@CharlesDuffy the real
cd
将其所有参数视为一个,谁在乎呢。如果您尝试
cd一两
(不带引号)
cd
将尝试cd到dir
一两
(带空格)@KerzedMetal不在bash 4.2.10上,它不会。@KerzedMetal…另外,请注意
cd一两
的情况;一个内置的语法,可以得到输入的实际文字命令,并确定空格的数量;函数不能,也不能区分
一两
一两
。因此,如果允许人们使用cd而不引用他们的参数列表,那么当发现IFS的多个元素彼此相邻或使用IFS的一个元素而不是第一个元素时,就会导致混乱。