我正在尝试编写一个小脚本,将当前目录更改为我的项目目录:
#!/bin/bash
cd /home/tree/projects/java
我将此文件保存为proj,使用chmod添加了执行权限,并将其复制到/usr/bin。当我呼叫它时:proj,它什么都不做。我做错了什么?
我正在尝试编写一个小脚本,将当前目录更改为我的项目目录:
#!/bin/bash
cd /home/tree/projects/java
我将此文件保存为proj,使用chmod添加了执行权限,并将其复制到/usr/bin。当我呼叫它时:proj,它什么都不做。我做错了什么?
当前回答
正如其他答案中所解释的,您已经更改了目录,但仅在运行脚本的子shell中更改。这不会影响父shell。
一种解决方案是使用bash函数而不是bash脚本(sh);通过将bash脚本代码放入函数中。这使得该函数可以作为命令使用,然后,它将在没有子进程的情况下执行,因此任何cd命令都会影响调用者shell。
Bash函数:
bash概要文件的一个功能是存储可以在终端或bash脚本中运行的自定义函数,与运行应用程序/命令的方式相同,这也可以用作长命令的快捷方式。
为了使您的功能更高效,您需要在多个文件的末尾复制您的功能
/home/user/.bashrc
/home/user/.bash_profile
/root/.bashrc
/root/.bash_profile
您可以使用sudo kwrite/home/user/.bashrc/home/user/.bash_profile/root/.bashrc/root/.bash_profile快速编辑/创建这些文件
如何:
将bash脚本代码复制到bash配置文件末尾的新函数中,然后重新启动终端,然后就可以运行cdd或编写的任何函数。
脚本示例
正在制作cd的快捷方式。。使用cdd
cdd() {
cd ..
}
ls快捷方式
ll() {
ls -l -h
}
ls快捷方式
lll() {
ls -l -h -a
}
其他回答
这将Serge的回答与David的不相关回答结合起来。它更改目录,然后启动用户的默认shell,而不是强制使用bash shell。然而,它需要getent和/etc/passwd来检测默认shell。
#!/usr/bin/env bash
cd desired/directory
USER_SHELL=$(getent passwd <USER> | cut -d : -f 7)
$USER_SHELL
当然,这仍然具有创建嵌套外壳的相同缺陷。
正如其他答案中所解释的,您已经更改了目录,但仅在运行脚本的子shell中更改。这不会影响父shell。
一种解决方案是使用bash函数而不是bash脚本(sh);通过将bash脚本代码放入函数中。这使得该函数可以作为命令使用,然后,它将在没有子进程的情况下执行,因此任何cd命令都会影响调用者shell。
Bash函数:
bash概要文件的一个功能是存储可以在终端或bash脚本中运行的自定义函数,与运行应用程序/命令的方式相同,这也可以用作长命令的快捷方式。
为了使您的功能更高效,您需要在多个文件的末尾复制您的功能
/home/user/.bashrc
/home/user/.bash_profile
/root/.bashrc
/root/.bash_profile
您可以使用sudo kwrite/home/user/.bashrc/home/user/.bash_profile/root/.bashrc/root/.bash_profile快速编辑/创建这些文件
如何:
将bash脚本代码复制到bash配置文件末尾的新函数中,然后重新启动终端,然后就可以运行cdd或编写的任何函数。
脚本示例
正在制作cd的快捷方式。。使用cdd
cdd() {
cd ..
}
ls快捷方式
ll() {
ls -l -h
}
ls快捷方式
lll() {
ls -l -h -a
}
我必须在tcsh中工作,我知道这不是一个优雅的解决方案,但例如,如果我必须将文件夹更改为一个单词不同的路径,那么整个事情可以在别名中完成
a alias_name 'set a = `pwd`; set b = `echo $a | replace "Trees" "Tests"` ; cd $b'
如果路径总是固定的
a alias_name2 'cd path/you/always/need'
应该工作在上面的行中,设置了新文件夹路径
这应该是你想要的。更改到感兴趣的目录(从脚本中),然后生成一个新的bash shell。
#!/bin/bash
# saved as mov_dir.sh
cd ~/mt/v3/rt_linux-rt-tools/
bash
如果你运行这个,它会把你带到感兴趣的目录,当你退出它时,它会让你回到原来的位置。
root@intel-corei7-64:~# ./mov_dir.sh
root@intel-corei7-64:~/mt/v3/rt_linux-rt-tools# exit
root@intel-corei7-64:~#
当您退出时,这甚至会将您带回到原始目录(CTRL+d)
我通过使用获得了代码<您的文件名>
./<您的文件名>不起作用,因为它不会更改终端中的目录,只是更改特定于该脚本的目录。
这是我的计划
#!/bin/bash
echo "Taking you to eclipse's workspace."
cd /Developer/Java/workspace
这是我的终端
nova:~ Kael$
nova:~ Kael$ . workspace.sh
Taking you to eclipe's workspace.
nova:workspace Kael$