我想知道是否有办法在 shell 脚本中找出当前用户的默认 shell?
用例:我正在编写一个为命令设置别名的脚本,这个别名是在 shell 脚本中设置的。
!# /bin/bash
alias = 'some command to set the alias'
Run Code Online (Sandbox Code Playgroud)
脚本中有一个逻辑,它尝试查找执行脚本的用户的默认 shell 并将此别名添加到相应的 ~/.bashrc 或 ~/.zshrc 文件中
但是当我在脚本前面添加一个shebang并明确要求它使用bash时,这里发布的答案总是按预期返回bash,尽管我是在ZSH终端上执行这个脚本的。
有没有办法获取执行脚本的 shell 类型,而不管 shebang 设置如何?
我正在寻找一种适用于 Mac 和所有基于 linux 的小酒馆的解决方案。
当我运行此命令时,它可以工作:
$ find . -inum 888696 -exec ls '{}' \;
Conversation.pst Outlook Data File Outlook Data File.sbd Trash Unsent Messages
Inbox.pst Outlook Data File.msf Sent.pst Trash.msf Unsent Messages.msf
Run Code Online (Sandbox Code Playgroud)
然而,当更换ls与cd它不工作:
$ find . -inum 888696 -exec cd '{}' \;
find: ‘cd’: No such file or directory
Run Code Online (Sandbox Code Playgroud)
我知道cd是一个bash内置的,所以我想这里面确实没有任何工作:
$ find . -inum 888696 -exec builtin cd '{}' \;
find: ‘builtin’: No such file or directory
Run Code Online (Sandbox Code Playgroud)
如何cd与find -exec …
使用此答案,我在我的.bashrc文件中创建了一个符号链接,以便更轻松地更改到常用目录。
例如
ln -s ~/a/b/c/d/development dev
Run Code Online (Sandbox Code Playgroud)
我可以通过输入将目录从我的home目录更改为目录。我也可以从我的目录进入,这也有效。developmentcd devls devhome
但是,这些命令仅适用于我的home目录。如果我从其他任何地方输入它们,我会收到一个错误提示No such file or directory。
如果我输入cd ~/dev或ls ~/dev它有效。
有人可以解释为什么会这样以及我如何解决它,这样~/当我不在我的家庭目录中时,我就不必包含在路径中。
在更改当前目录的脚本 (cd, pwd) 中 ,展示了如何运行更改终端目录的 bash 脚本。
但是我如何运行一个 perl 脚本来运行一个改变终端目录的 bash 脚本?