Сохраните в последний раз рабочий каталог на выходе из системы Bash

Ну, я нашел комментарий полезным и придумал это, чтобы решить мою вторую проблему.

val isAppInstalled = appInstalledOrNot("com.microsoft.office.officelens")
        if (isAppInstalled)
        {
            //This intent will help you to launch if the package is already installed
            Toast.makeText(this@ScrollingActivity, "Its toast at if!", Toast.LENGTH_SHORT).show()
            val LaunchIntent = getPackageManager().getLaunchIntentForPackage("com.microsoft.office.officelens")
    startActivityForResult(LaunchIntent, IMAGE_PICK_CODE)
        }
        else
        {
            Toast.makeText(this@ScrollingActivity, "else executed!", Toast.LENGTH_SHORT).show()
            val intent = Intent(Intent.ACTION_VIEW, Uri.parse("market://details?id=com.microsoft.office.officelens"))
            intent.flags = Intent.FLAG_ACTIVITY_NEW_TASK
            startActivityForResult(intent, IMAGE_PICK_CODE)

        } 

Эта функция позволяет вам проверить, установлено приложение или нет

 private fun appInstalledOrNot(uri:String):Boolean {
        val pm = getPackageManager()
        try
        {
            pm.getPackageInfo(uri, PackageManager.GET_ACTIVITIES)
            return true
        }
        catch (e:PackageManager.NameNotFoundException) {}
        return false
    }
11
задан Verhogen 20 April 2009 в 05:46
поделиться

6 ответов

Сохранить последний рабочий каталог в ~ ./. bash_logout в скрытый файл:

pwd > ~/.lastdirectory

Прочитайте этот файл в ~ / .bashrc с помощью

[ -s ~/.lastdirectory ] && cd `cat ~/.lastdirectory`
19
ответ дан 3 December 2019 в 02:02
поделиться

Поместите его в свой ~ / .bashrc (вероятно, в конце):

cd "$(<~/.storepwd)"

Затем у вас есть выбор из следующего:

Либо поместите это в ~ / .bash_logout (не запомнит каталог для интерактивных оболочек без входа в систему) :

printf %s "$PWD" > ~/.storepwd

Или используйте ловушку на EXIT , вставьте это в ~ / .bashrc (ловушки могут быть перезаписаны легко / случайно):

trap 'printf %s "$PWD" > ~/.storepwd' EXIT

Или используйте PROMPT_COMMAND , поместите этот ~ / .bashrc (вероятно, самый надежный способ):

PROMPT_COMMAND+='; printf %s "$PWD" > ~/.storepwd'

Также убедитесь, что ваш ~ / .profile или ~ / .bash_profile исходные тексты вашего ~ / .bashrc ,в противном случае путь не будет восстановлен при запуске оболочки входа в систему.

См. http://mywiki.wooledge.org/DotFiles для получения информации о том, как вы должны использовать ваши точечные файлы.

9
ответ дан 3 December 2019 в 02:02
поделиться

это не константа, если вы хотите переопределить ее;) попробуйте виртуальное свойство только для чтения (или защищенный установщик) ...

Свойство только для чтения

public class MyClass {
    public virtual string MyConst { get {return "SOMETHING"; }}
}
...
public class MyDerived : MyClass {
    public override string MyConst { get { return "SOMETHINGELSE"; }}
}

Защищено Сеттер

public class MyClass {
    public string MyConst { get; protected set; }

    public MyClass() {
        MyConst = "SOMETHING";
    }
}

public class MyDerived : MyClass {
    public MyDerived() {
        MyConst = "SOMETHING ELSE";
    }
}
- 121 --- 1848132--

Вы также должны быть осторожны со всей этой концепцией. Например, если вам удастся запустить код, когда вы этого не ожидаете, это может привести к путанице в любом количестве вещей.

Например, если вам нужно запустить скрипт оболочки, который изменил текущий рабочий каталог, а затем во время выхода удалось сохранить CWD, и вы можете оказаться в следующей запускающейся оболочке в каталоге, который вы не ожидаете.

Еще один популярный, по крайней мере для меня на $ work, - это когда скрипт запускается, когда пользователь root запускает скрипт, все автоматически (т.е. программно). Если вы делаете этот трюк CWD для своего собственного пользователя, это нормально, но это может в основном испортить системные инструменты, которые ожидают, что "su - youruser -c ls" вернет файлы в вашем домашнем каталоге. (Хорошо, называть «ls», поскольку ваш пользователь - глупая идея, но есть вещи, в которых ваш пользователь может иметь лучшую среду для запуска чего-либо, чем делает root - например, на монтируемых NFS, у которых есть сжатый root.)

ключевой момент здесь состоит в том, чтобы определить, используете ли вы интерактивную оболочку или нет, и, если нет, не восстанавливайте и не сохраняйте CWD . IIRC, $ - имеет «i» для интерактивных оболочек. Используйте его для установки ловушки и для восстановления CWD.

Лично я просто установил псевдоним:

alias go='. go.sh'

, а затем go.sh просто проверяет свой параметр, для какого каталога я хочу перейти. Например, «go myproj» будет cd ~ / svn / myproj, а «go bigdisk» будет cd / mnt / bigdisk. И, для более сложных случаев, он может принимать больше параметров, например, "go myproj lib" будет просто "cd ~ / svn / myproj / myproj / lib" или что угодно. Нет автоматического сохранения, но нет и побочных эффектов.

3
ответ дан 3 December 2019 в 02:02
поделиться

Вы можете записывать текущий каталог (pwd) в какой-то файл каждый раз при изменении dir (cd). При запуске терминала скрипт запуска bash должен искать в этом файле «last dir». Если что-то найдено - перейдите к нему.

2
ответ дан 3 December 2019 в 02:02
поделиться

Посмотрите на .bashrc и, возможно, сможете изменить его во время выхода из системы, чтобы он содержал интересующий вас каталог.

1
ответ дан 3 December 2019 в 02:02
поделиться

Скорее всего, вы захотите сохранить текущий каталог в файл при выходе из оболочки. Существует несколько способов определения выхода из оболочки:

  1. Поместите некоторый код в ~ / .bash_logout. Это будет выполнено только при выходе из оболочки входа в систему, поэтому, если вы просто закроете окно терминала, каталог не будет сохранен.
  2. Ловушка при выходе. Используя встроенную ловушку, вы можете выполнить некоторый код при выходе из оболочки. Это будет выполняться при выходе из любой оболочки - ну, любой оболочки, в которой вы настроили ловушку, то есть.

Вы можете сохранять CWD при каждом приглашении или каждый раз, когда запускаете «cd», но это немного излишне.

Чтобы восстановить CWD при следующем запуске оболочки, достаточно просто запустить 'cd' для содержимого файла сохранения, если он существует.

Вы можете подумать о том, что должно произойти, если у вас одновременно работают несколько оболочек. Какой из них вы хотите сохранить CWD? Должны ли все новые оболочки, которые начинают использовать этот CWD? Или только следующая оболочка, которая запускается?

1
ответ дан 3 December 2019 в 02:02
поделиться