[英]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_newest
和cd_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.