更改为最新或最旧目录--csh习惯用法在bash中不起作用
请让我知道为什么以下命令在csh模式下工作而不是在bash模式下工作 狂欢节: 更改为csh后:更改为最新或最旧目录--csh习惯用法在bash中不起作用,bash,shell,Bash,Shell,请让我知道为什么以下命令在csh模式下工作而不是在bash模式下工作 狂欢节: 更改为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\u最新的和cd\u最旧的函数: cd_by_test() { local t
~ $ csh
CSH > cd `ls -ltr | grep ^d | tail -1 | awk '{print $9}'`
CSH > pwd
/home/mkumar/synopsys_cache_L-2016.03-SP5
依赖解析
ls
的代码。不要这样做
下面有点花哨,重用相同的代码来构建cd\u最新的
和cd\u最旧的
函数:
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\u by\u test
函数中的变量$test
,然后使用[“$dir”“$test”“$best\u dir”]
应用该操作符
在最近修订的版本中,我们还可以在目录的特定子集之间进行选择:
cd_newest *-test.d/
…将
cd
转到最新的*-test.d
目录。依赖解析ls
的代码。不要这样做
下面有点花哨,重用相同的代码来构建cd\u最新的
和cd\u最旧的
函数:
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\u by\u test
函数中的变量$test
,然后使用[“$dir”“$test”“$best\u dir”]
应用该操作符
在最近修订的版本中,我们还可以在目录的特定子集之间进行选择:
cd_newest *-test.d/
…将
cd
转到最新的*-test.d
目录。未经请求插入zsh
(作为理由,如果您只想移动到csh
以外的shell,我建议您考虑zsh
)
*
后面的括号包含各种glob限定符:
将匹配限制为目录/
按修改时间对扩展进行排序om
仅选择第一个匹配项[1]
zsh
插入插头(作为理由,如果您只想移动到csh
以外的shell,我建议您考虑zsh
)
*
后面的括号包含各种glob限定符:
将匹配限制为目录/
按修改时间对扩展进行排序om
仅选择第一个匹配项[1]
ls
输出的逻辑都是一个非常糟糕的主意。此外,我不知道cd ls-ltr | grep^d | tail-1 | awk'{print$9}'
如何工作。可能你的意思是cd$(cd ls-ltr | grep^d | tail-1 | awk'{print$9})
@codeforester,这只是问题的格式问题。我无法复制;同样的命令在bash
中运行良好。请参见,和。构建依赖于ls
输出的逻辑是一个非常糟糕的主意。此外,我不确定cd ls-ltr | grep^d | tail-1 | awk'{print$9}'
如何工作。可能你的意思是cd$(cd ls-ltr | grep^d | tail-1 | awk'{print$9})
@codeforester,这只是问题的格式问题。我无法复制;同样的命令在bash
中也能很好地工作。请参阅,和。我个人对zsh的厌恶程度一样,这很可爱。:)就像我对zsh的个人厌恶一样,这很可爱。:)只是好奇:你为什么从dir
中去掉尾随的/
?纯粹是个人的审美感受与set-x
;没有什么令人信服的地方。请您解释一下test=$1
及其对函数内循环最后一行的影响好吗?@codefrestercd_by_test
由用于比较两个目录的操作符参数化。传递-nt
检查$dir
是否比目前找到的最佳目录更新;传递-ot
检查is是否早于。将运算符存储在变量中而不是硬编码它是从[…]
切换到[…]
的必要条件。只是好奇:为什么要从dir
中去掉尾随的/
?使用set-x
纯粹是个人审美感受;没有什么令人信服的地方。请您解释一下test=$1
及其对函数内循环最后一行的影响好吗?@codefrestercd_by_test
由用于比较两个目录的操作符参数化。传递-nt
检查$dir
是否比目前找到的最佳目录更新;传递-ot
检查is是否早于。将运算符存储在变量中而不是硬编码是从[…]
切换到[…]
的必要条件。