繁体   English   中英

切换到最新或最旧的目录-csh惯用语在bash中不起作用

[英]Changing to newest or oldest directory — csh idiom not working in bash

请让我知道为什么以下命令在csh模式下而不在bash下工作。

重击:

~ $ cd `ls -ltr | grep ^d | tail -1 | awk '{print $9}'`
bash: cd: synopsys_cache_L-2016.03-SP5: No such file or directory
~ $ pwd
/home/mkumar

更改为csh后:

~ $ csh
CSH > cd `ls -ltr | grep ^d | tail -1 | awk '{print $9}'`
CSH > pwd
/home/mkumar/synopsys_cache_L-2016.03-SP5

依赖于ls代码天生就容易出错 不要这样

下面的代码有点花哨,重复使用相同的代码来构建cd_newestcd_oldest函数:

cd_by_test() {
  local test=$1 dir best_dir=
  shift
  (( "$#" == 0 )) && set -- */
  for dir; do dir=${dir%/}
    [[ -d "$dir" ]] || continue
    [[ $best_dir ]] || best_dir=$dir
    [ "$dir" "$test" "$best_dir" ] && best_dir=$dir
  done
  if [[ $best_dir ]]; then
    cd "$best_dir"
  else
    echo "No directory found" >&2
  fi
}

cd_newest() { cd_by_test -nt "$@"; }
cd_oldest() { cd_by_test -ot "$@"; }

在这里,我们将运算符设置为使用两个比较两个文件,方法是将其分配给cd_by_test函数中的变量$test ,然后使用[ "$dir" "$test" "$best_dir" ]来应用该运算符。


在最近修订的版本中,我们还可以在目录的特定子集之间进行选择:

cd_newest *-test.d/

...将cd到最新的*-test.d目录。

不请自来的zsh插件(作为理由,如果您只想迁移到csh以外的其他外壳,我建议考虑使用zsh )。

% cd *(/om[1])
% pwd
/home/mkumar/synopsys_cache_L-2016.03-SP5

*后面的括号包含各种glob 限定符

  • /将匹配项限制为目录
  • om按修改时间对扩展进行排序
  • [1]仅选择第一个比赛

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM