Я добавил кнопку на панель инструментов gvim, которая запускает файл .sh
. Файл .sh
запускает scons для создания моего приложения c++ в подкаталоге /build и запускает его. Проблема в том, что при запуске приложения его текущий рабочий каталог представляет собой папку, содержащую файл .sh
(а не подкаталог application/build)! Итак, как мне запустить встроенный исполняемый файл c++ исполняемый файл (linux) из .sh
файла, так что его рабочим каталогом будет папка, которая содержит исполняемый файл?
Просто
cd $(dirname "$0")
./exec_test
Обратите внимание, что вам нужно ./exec_test
, а не exec_test
если каталог на самом деле уже находится в PATH
Вот пример чего-то подобного (я не использую 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
.
cd
в каталог , содержащий исполняемый файл перед его запуском?