将终端中的永久命令快捷方式设置为 cd 到下载

将终端中的永久命令快捷方式设置为 cd 到下载

/bin我在名为的新文本文件中写了ram以下内容:

watch -n 1 free -h

和一个文件sen

watch -n 1 sensors

在同一文件夹中,以避免输入

watch blahblahblah...

每次。

另外,我改变了这两个的权限

-rw-r--r--

-rw-r--r-x

并实现了我的目标。即使重新打开 shell 后它也能正常工作,也就是说,我可以输入ram而不是watch -n 1 free -h

但是,当我尝试同样的方法后,出现了问题

cd /home/myname/Downloads/

并将新文本文件保存在/bin并命名dow,权限相同。

这次dow在终端上什么也不做,甚至没有显示任何消息。

我尝试将同一个文件保存在里面/usr/bin,但终端仍然没有任何反应,我的工作目录也没有改变。

这怎么可能?

答案1

您编写了一个脚本,并且它可以工作。但它并没有达到您的预期,因为脚本在与调用它的 shell 不同的 shell 中运行。

脚本运行的 shell 完全按照脚本的指示执行操作;它将工作目录更改为~/Downloads。它没有其他事情可做,因此退出。调用 shell 的目录没有更改。

您不必相信我的话 - 您可以通过在文件ls的下一行中添加内容来演示dow。当您运行命令时,将列出目录的内容(假设它有一些内容)(没有通常的颜色,这些颜色由非交互式 shell 无法读取的~/Downloads别名提供)。~/.bashrc

要在当前 shell 中执行脚本,可以使用命令source,也可以写成。因此,如果您输入. file

. dow

您的当前 shell 将改变目录。

或者,您可以设置一个别名:

zanna@toaster:~$ alias dow='cd $HOME/Downloads'
zanna@toaster:~$ dow
zanna@toaster:~/Downloads$ 

为了使其永久生效,请添加以下行

alias dow='cd $HOME/Downloads'

添加到您的~/.bashrc文件中。然后每次运行交互式 shell 时它都会可用。

答案2

这是一个跨站点重复:https://stackoverflow.com/a/255415/383694

问题是该脚本在子 shell 中运行。该脚本更改目录然后关闭,不会对当前 shell 造成任何更改。

两种缓解措施:

  1. 执行. dow使脚本在当前 shell 的上下文中运行。
  2. 使用别名,例如在执行目录更改的 ~/.bashrc 文件中--例如alias dow="cd /home/myname/Downloads/"

如果您要更改目录,通常最好先测试一下它是否正常工作,然后再执行其他操作。

链接的问题中还有一些其他选项。

相关内容