所以我正在创建一个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的方式
答案 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
。