запуск исполняемого файла в своем рабочем каталоге

1

Я добавил кнопку на панель инструментов gvim, которая запускает файл .sh. Файл .sh запускает scons для создания моего приложения c++ в подкаталоге /build и запускает его. Проблема в том, что при запуске приложения его текущий рабочий каталог представляет собой папку, содержащую файл .sh (а не подкаталог application/build)! Итак, как мне запустить встроенный исполняемый файл c++ исполняемый файл (linux) из .sh файла, так что его рабочим каталогом будет папка, которая содержит исполняемый файл?

  • 0
    В вашем сценарии оболочки, не могли бы вы просто cd в каталог , содержащий исполняемый файл перед его запуском?
  • 0
    Нет, я пробовал это :)
Показать ещё 5 комментариев
Теги:

2 ответа

2

Просто

 cd $(dirname "$0")
 ./exec_test

Обратите внимание, что вам нужно ./exec_test, а не exec_test если каталог на самом деле уже находится в PATH

1

Вот пример чего-то подобного (я не использую scons.)

Я добавляю значок своей панели инструментов:

:amenu ToolBar.mytool :!/home/me/code/misc/foo.sh "%"

Для меня, когда я нажимаю это, vim запускает скрипт в том же рабочем каталоге, что и vim.

foo.sh содержит:

#!/bin/bash

set -e

# You should see the name of your file.
# It might just be "my_file.c"
echo "$1"
# This will tell you where your script is current cd'd to.
pwd

# 'cd' to where the file passed on the command line is:
cd "$(dirname "$1")"

# Look for "CMakeLists.txt"
# You only need this loop if your build file / program might be up a few directories.
# My stuff tends to be:
# / - project root
#   CMakeLists.txt
#   src/
#     foo.c
#     bar.c
while true; do
    # We found it.
    if [[ -e "CMakeLists.txt" ]]; then
        break
    fi
    # We didn't find it. If we're at the root, just abort.
    if [[ "'pwd -P'" = "/" ]]; then
        echo "Couldn't find CMakeLists.txt." >&2
        exit 1
    fi
    cd ..
done

# I do builds in a separate directory.
cd build && make

Вы заменили бы CMakeLists.txt на SConstruct, а последний cd build && make с помощью scons или что-то подходящее для scons.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню