我有两个问题。首先,有没有一种方法可以在另一个(特定)脚本运行时运行一个脚本?
其次,我创建了一个脚本,用它来“覆盖”包“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