当另一个脚本运行时运行一个脚本,或者修改包脚本

当另一个脚本运行时运行一个脚本,或者修改包脚本

我有两个问题。首先,有没有一种方法可以在另一个(特定)脚本运行时运行一个脚本?

其次,我创建了一个脚本,用它来“覆盖”包“cd”脚本,但是,我使用别名完成了此操作,我想知道是否有更好(更合适)的方法来执行此操作,或者就此而言,我的方法是否会导致任何错误。

请允许我解释一下我的脚本……每当要求“cd”移动到不存在的目录时,它都会让用户选择重新定位输入路径中“最深”的现有目录。举个例子会更容易理解……

假设我输入了:

cd /var/www/html/foo

并且 /var/www/html/foo 不存在,但 /var/www/html 存在。然后系统会询问用户是否要继续访问 /var/www/html。

我能够使用别名和以下脚本来实现这一点:

   #!/bin/bash
   cd $*
   <code to check if valid, et cetera>

然而,这是通过使用

   alias cd='cdImproved'

因此,我不确定在执行此操作时是否会遇到任何问题,或者是否有更“正确”的方法来做同样的事情。

答案1

我假设这cd &*是一个拼写错误,你的意思是:cd $*。此外,等号周围不应该有任何空格:alias cd='cdImproved'

您无法cd在正常运行的脚本中为当前 shell 设置新目录。您必须使用别名、函数或源脚本。

您当然可以在文件中定义函数或别名,并在要使用它的每个脚本中引用它。这是可行的方法。由于cd是 shell 内置命令,因此您必须修改 shell 或创建可加载内置命令才能全局更改其行为。

要在脚本中使用别名,您必须在脚本中启用该功能:

shopt -s expand_aliases

相关内容