簡體   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