无法在ZSH

时间:2019-11-12 11:26:45

标签: linux bash zsh

我已经在.zshrc内放置了一个bash文件,并在每次打开新的终端窗口或源.zshrc时尝试了各种不同的运行方式,但是没有运气。

仅供参考:在.bashrc上运行正常

这是.zshrc脚本:

#Check if ampps is running
bash ~/ampps_runner.sh & disown

不同的方法:

#Check if ampps is running
sh ~/ampps_runner.sh & disown

另一种方法:

#Check if ampps is running
% ~/ampps_runner.sh & disown

以上所有方法均无效(这意味着它假定要运行一个名为ampps的应用程序,但不能在zsh中运行。

注意:在从bash切换到zsh之前,它运行良好。因此它没有权限或语法问题。

更新:ampps_runner.sh的内容

#! /usr/bin/env

echo "########################"
echo "Checking for ampps server to be running:"


check=$(pgrep -f "/usr/local/ampps" )

#[  -z "$check" ] && echo "Empty: Yes" || echo "Empty: No"

if [ -z "$check" ]; then
    echo "It's not running!"
    cd /usr/local/ampps
    echo password | sudo -S ./Ampps
else
    echo "It's running ..."
fi

2 个答案:

答案 0 :(得分:0)

(1)我相信 ~/.ampps_runner.sh bash 脚本,因此,其第一行应为

#!/bin/bash

#!/usr/bin/bash

不是

#! /usr/bin/env

(2)然后,在 zsh 脚本(~/.zshrc)中的调用应为:

~/ampps_runner.sh

(3)注意: ~/.ampps_runner.sh 应该为executable。将其更改为可执行文件:

$ chmod +x ~/ampps_runner.sh

答案 1 :(得分:0)

bash终端临时运行zsh的最简单方法是

exec bash 

或者只是

bash 

然后,您可以运行以前只能在bash中运行的命令。一个例子

help exec

退出

exit 

现在您又回到了原来的外壳

如果您想知道默认的外壳程序

echo $SHELL 

set | grep SHELL=

如果您想可靠地了解当前的外壳

ps -p $$

或者,如果您只想使用shell名称,

ps -p $$ | awk "NR==2" | awk '{ print $4 }' | tr -d '-'

您可能只是将最后一个放在函数中供以后使用,只知道它仅在源于当前shell的情况下可用。

whichShell(){
   local defaultShell=$(echo $SHELL | tr -d '/bin/')
   echo "Default: $defaultShell" 

   local currentShell=$(ps -p $$ | awk "NR==2" | awk '{ print $4 }' | tr -d '-')
   echo "Current: $currentShell"
}

调用方法以查看结果

whichShell