更改为最新或最旧目录--csh习惯用法在bash中不起作用

更改为最新或最旧目录--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模式下工作而不是在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 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
及其对函数内循环最后一行的影响好吗?@codefrester
cd_by_test
由用于比较两个目录的操作符参数化。传递
-nt
检查
$dir
是否比目前找到的最佳目录更新;传递
-ot
检查is是否早于。将运算符存储在变量中而不是硬编码它是从
[…]
切换到
[…]
的必要条件。只是好奇:为什么要从
dir
中去掉尾随的
/
?使用
set-x
纯粹是个人审美感受;没有什么令人信服的地方。请您解释一下
test=$1
及其对函数内循环最后一行的影响好吗?@codefrester
cd_by_test
由用于比较两个目录的操作符参数化。传递
-nt
检查
$dir
是否比目前找到的最佳目录更新;传递
-ot
检查is是否早于。将运算符存储在变量中而不是硬编码是从
[…]
切换到
[…]
的必要条件。