Как мой скрипт может определить, запущен ли он bash или тире?

Я запускаю Ubuntu 14.04 с Flashback Metacity DE, и так я это сделал: если вы просто хотите удалить значок, нажмите клавишу Alt и щелкните правой кнопкой мыши по значку. Затем выберите «Удалить с панели». Неактуальное время загрузки будет не там, но программа запустится. Если вы хотите, чтобы dropbox прекратил открываться при загрузке, я сделал это, перейдя в «Системные инструменты», затем «Настройки», затем «Запуск приложений». Затем вы получаете список программ, которые запускаются при загрузке. Просто выберите Dropbox и нажмите «Удалить». Надеюсь, это то, что вы искали.

12
задан 22 January 2012 в 15:52

5 ответов

Вы можете сделать то, что $BASH_VERSION пусто в работе dash для вас:

if [ "$BASH_VERSION" = '' ]; then
    echo "This is dash."
else
    echo "This is bash."
fi
11
ответ дан 25 May 2018 в 14:58
  • 1
    "X" техника архаична и нужна только в древних оболочках. Используйте if [ "$BASH_VERSION" = '' ] – Dennis Williamson 25 January 2012 в 01:23
  • 2
    @DennisWilliamson: Спасибо. Я думал, что ваша техника специфична для Bash, но я просто положил ее в Dash, и это сработало. Я отредактировал свой ответ. – Scott Severance 25 January 2012 в 10:40
  • 3
    Или просто используйте -n , или ничего . (+1, однако. [F2] работает отлично.) – Eliah Kagan 31 August 2017 в 21:26

Вы можете сделать то, что $BASH_VERSION пусто в работе dash для вас:

if [ "$BASH_VERSION" = '' ]; then
    echo "This is dash."
else
    echo "This is bash."
fi
11
ответ дан 10 August 2018 в 08:17

Вам просто нужно использовать кавычки для переменной BASH_VERSION для использования -n

if [ -n "$BASH_VERSION" ];then
 echo "this is bash"; 
else 
 echo "this is dash";
fi
5
ответ дан 25 May 2018 в 14:58
  • 1
    поскольку [ "$EMPTY_STRING" ] оценивает значение false, вам даже не нужен -n. Вам просто нужно процитировать переменную. – jeberle 11 March 2016 в 21:22

Используйте /proc/[PID]/cmdline, чтобы узнать, с чем работает скрипт, и проверьте, что он содержит. Переменная $$ даст нам PID текущей оболочки. Таким образом, мы можем сделать такой скрипт,

#!/bin/bash
if grep -q 'bash' /proc/$$/cmdline ;
then
    echo "This is bash"
else
    echo "This is some other shell"
fi

Вот тест того же скрипта:

$> bash test_script.sh                                                                                                
This is bash
$> dash test_script.sh                                                                                                
This is some other shell
1
ответ дан 25 May 2018 в 14:58
  • 1
    Это не сработает на Mac. Проверьте $ BASH_VERSION. – Austin Burk 27 June 2016 в 15:49
  • 2
    @AustinBurk не нужно работать на Mac. Это Ask Ubuntu. – TheWanderer 27 June 2016 в 23:03
  • 3
    @ Zacharee1 О, черт возьми, я не обращал внимания:,) – Austin Burk 27 June 2016 в 23:19
  • 4
    Я не хочу редактировать это от того, что вы намереваетесь, но я предлагаю указать ограничения этого метода. У Bash не должно быть bash от его имени; это не редкость для выполнения исполняемого файла bash через символическую ссылку с другим именем. Обычно каждый хотел бы рассмотреть этот Баш. Кроме того, шаблон сопоставляется в любом месте /proc/$$/cmdline , который должен быть исправлен, но имейте в виду, что аргументы в cmdline ограничены нулевым символом. grep -qE '(^|/)bash$' чувствует, что он должен работать, но дает ложный результат, когда любой аргумент bash. – Eliah Kagan 31 August 2017 в 21:24
  • 5
    @EliahKagan Не стесняйтесь редактировать мои ответы в любое время - у вас достаточно опыта, поэтому я знаю, что ваши изменения могут предложить только улучшения. Ответ был написан, когда я был гораздо более зеленым с ракушками, чем сейчас. – Sergiy Kolodyazhnyy 17 September 2017 в 21:30

Используйте /proc/[PID]/cmdline, чтобы узнать, с чем работает скрипт, и проверьте, что он содержит. Переменная $$ даст нам PID текущей оболочки. Таким образом, мы можем создать такой скрипт,

#!/bin/bash
if grep -q 'bash' /proc/$$/cmdline ;
then
    echo "This is bash"
else
    echo "This is some other shell"
fi

Вот тест того же скрипта:

$> bash test_script.sh                                                                                                
This is bash
$> dash test_script.sh                                                                                                
This is some other shell
1
ответ дан 25 July 2018 в 20:07

Другие вопросы по тегам:

Похожие вопросы: