Próbuję uruchomić polecenie, które zostało wygładzone w moim ~/.bashrc
z Perla za pomocą komendy system
. Działa dobrze, uruchamiając polecenie tylko raz, ale gdy uruchomię go dwukrotnie, drugie wywołanie zostanie uruchomione jako zadanie w tle, a następnie zawieszone (tak samo, jak naciśnięcie klawisza <CTRL-Z>
) i muszę wpisać fg
, aby ukończyć to polecenie. Na przykład:Uruchamianie polecenia systemowego pod interaktywną powłoką bash
use strict;
use warnings;
system ('bash -ic "my_cmd"');
system ('bash -ic "my_cmd"');
Drugie połączenie nigdy się nie kończy. Dane wyjściowe to [1]+ Stopped a.pl
.
Uwaga:
- Taki sam wynik uzyskuje się, gdy zastąpienie
my_cmd
z jakiegokolwiek innego polecenia, na przykładls
. - Wygląda na to, że nie zależy to od zawartości mojego pliku
~/.bashrc
. Próbowałem usunąć wszystko z tego, a problem nadal występował.
Używam Ubuntu 14.04 i Perl wersja 5.18.2.
Aktualizacja
Do debugowania zmniejszona mój ~/.bashrc
do
echo "Entering ~/.bashrc .."
alias my_cmd="ls"
alias
i mój ~/.bash_profile
do
if [ -f ~/.bashrc ]; then
echo "Entering ~/.bash_profile .."
. ~/.bashrc
fi
Teraz działa:
system ('bash -lc "my_cmd"');
system ('bash -lc "my_cmd"');
daje
Entering ~/.bash_profile ..
Entering ~/.bashrc ..
alias my_cmd='ls'
bash: my_cmd: command not found
Entering ~/.bash_profile ..
Entering ~/.bashrc ..
alias my_cmd='ls'
bash: my_cmd: command not found
i działa
system ('bash -ic "my_cmd"');
system ('bash -ic "my_cmd"');
daje
Entering ~/.bashrc ..
alias my_cmd='ls'
a.pl p.sh
[1]+ Stopped a.pl
Działa! Wspaniały :) –