制作一个目录然后直接在其中进行cd'ing而无需新命令

时间:2017-07-07 09:07:33

标签: ios bash

所以我正在创建一个Bash脚本来创建一个时间戳目录,但我遇到的问题是它创建了一个时间戳目录,但不是cd进入它这里是代码:

`#!/bin/bash`
 now=$(date +"%Y-%m-%d-%S")
mkcd () {
mkdir "$now"
cd "$now"
}
mkdir /var/mobile/backup
cd /var/mobile/backup
mkcd /var/mobile/backup/$now
echo yep

这个脚本是用于ios的方式

3 个答案:

答案 0 :(得分:0)

当前工作目录是每个进程都拥有的环境变量,shell中的简单命令启动新进程并等待终止以更新退出状态$?变量。子进程有自己的环境变量集继承父进程的导出变量。 子进程的当前工作目录可以更改,但不会更改父工作目录。 cd不是程序,而是内置的shell。

答案 1 :(得分:0)

正如@edvin所说,这个脚本在不同的shel上运行,对你当前的会话PWD没有影响。

您可以在用户的​​.profile或特定于shell的文件中将此脚本编写为函数。这样调用函数不会创建一个新的shell实例来执行命令,但会在当前的shell中执行它们:

mkcd() {
  mkdir $1 && cd $1
}

您可以像这样使用它:

now=$(date +"%Y-%m-%d-%S")
mkcd $now

答案 2 :(得分:0)

我认为最简单的方法是使用$_,它基本上代表上一个命令的最后一个参数

now=$(date +"%Y-%m-%d-%S")
mkcd () {mkdir $now && cd $_}

作为旁注,我会将now变量放在函数中,这样mkcd不依赖于在函数本身之外创建的变量

mkcd () {
    now=$(date +"%Y-%m-%d-%S")
    mkdir $1$now && cd $_
}

示例电话:

mkcd ~/

例如,这会创建一个目录/home/yourusername/2017-07-07-27