Bash niedziałający slash

0

Mam sobie np. taką funkcje w .bashrc:

myFunction() {
if [[ "$1" =~ .py$ ]]; then
cat "$1"
fi
}

Jest ona troche dziwna, ale to ma być tylko przykład. Funkcja będzie wywoływać polecenie "cat" gdy napiszemy w terminalu nazwę pliku kończącego się na ".py"., dla tego pliku. Działa to dobrze poza przypadkiem gdzie podamy jakiś inny katalog np. python27/myfile.py. W terminalu wypisuje wtedy "No such file or directory". Ustaliłem, że winny temu jest znak "/". Niestety zaescapowanie go w funkcji nic nie zmienia. Co można na to poradzić?

0

U mnie działa wyśmienicie, zapewne nie masz tam pliku, sprawdź dobrze ścieżkę do pliku.
Sprawdź czy wprowadzasz dobry znak "forward slash" "/".

Możesz też spróbować :
cat $1

0
Kronikarz napisał(a):

U mnie działa wyśmienicie, zapewne nie masz tam pliku, sprawdź dobrze ścieżkę do pliku.
Sprawdź czy wprowadzasz dobry znak "forward slash" "/".

Możesz też spróbować :
cat $1

U innych też działa tylko u mnie nie, dziwne. Ścieżke mam dobrą, wprowadzam dobry znak "/" i żadna inna kombinacja z cudzysłowami nic nie zmienia, dalej nie działa.

0

Mam Ubuntu 16 jak to ma znaczenie, możliwe że coś zmienili w nowej wersji i dlatego nie działa? To przecież niemożliwe żeby u 2 osób ten sam bash działał inaczej.

0

sprawdź jaki jest bieżący katalog.

0
MarekR22 napisał(a):

sprawdź jaki jest bieżący katalog.

Jestem w katalogu domowym a plik jest w katalogu python27 i na pewno istnieje. Więc jak wpisze python27/myfile.py z katalogu domowego to nawet jakby ten plik nie istniał terminal powinien mi wypisać cat: myfile.py: No such file or directory A wypisuje mi bash: myfile.py: No such file or directory

0

Więc jak wpisze python27/myfile.py z katalogu domowego to nawet jakby ten plik nie istniał terminal powinien mi wypisać

a ./python27/myfile.py?

0

Wpisz ścieżkę bezwzględną np:
/home/User_name/python27/costam.py
może python27 leży w głównym katalogu i wymaga /python27/costam.py

0

Troche zmodyfikowałem przykład żeby był prostszy i nie było zamieszania z katalogami. Funkcja powinna wypisać ten sam tekst co ja gdy wpisze w terminalu tekst kończący się na text. No i dalej jest ten sam problem, działa to poprawnie gdy wpisze coś niezawierającego /, ale gdy wpisze np. /text to mi wypisuje bash: /text: No such file or directory. zamiast wypisać /text. Jak można sprawić żeby to przestało być traktowane jak próba zmiany katalogu? Żadne próby zaescapowania tego nie działają (np. if [[ $1 =~ /text$ ]]; then)

myFunction() {
  if [[ "$1" =~ text$ ]]; then
      echo "$1"
  fi

}
0

Widze że na polskich forach pomocy z troche trudniejszymi sprawami się nie uświadczy. Musiałem napisać aż na stackoverflow żeby uzyskać konkretną odpowiedź, dostałem ją w kilka minut włącznie z kawałkiem dokumentacji który tej sprawy dotyczy. Jednak niemożliwe jest użycie znaku "/" w tym przypadku, więc ci którzy tutaj pisali że im działa albo kłamali albo nie wiem co innego, bo to nie ma prawa działać. http://stackoverflow.com/questions/38130133/command-not-found-handler-does-not-with-with-slashes

0
:~$ mkdir folder
:~$ cp ./exp.py ./folder/
:~$ ls folder
exp.py
:~$ myFunction folder/exp.py 
#!/usr/bin/python2
 
import os
import pwnlib.asm as asm
import pwnlib.elf as elf
import sys
import struct
...
:~$ cat .bashrc
...
myFunction() {
if [[ "$1" =~ '.py' ]]; then
cat "$1";
fi
}
...
 

Jakbym tego nie wpisywał. Może nie uruchomiłeś konsoli z nowymi ustawieniami z bashrc?

0

@up sprawdzałem zawsze po wcześniejszym wpisaniu "source ~/.bashrc" w terminalu. Na pewno działa ci ten przykład jak wpiszesz coś ze slashem? Jak tak daj jakiś screen bo z tego co mi pisali to nie może działać.

0

@Kronikarz chodzi mi o ten przykład ze stackoverflow bo on jest najprostszy. Z tego co widze wpisujesz nazwe funkcji i dopiero potem slash i coś tam jeszcze, a mi chodzi o to żeby wyłącznie wpisać w terminalu np. "~/.python27/file.py" albo nawiązując do przykładu ze stackoverflow "whatever/any"

0

Teraz to już kompletnie nie rozumiem co chcesz uzyskać.
Jak chcesz uruchamiać pliki z pewnym rozszerzeniem w odpowiedni sposób to może spróbuj pobawić się "mimeopen" czy czymś podobnym.

0

Chciałem sobie pobierać pliki wgetem podając w terminalu tylko nazwe pliku. A więc zamiast "wget http://example.com/file.webm" wpisywałbym samo "http://example.com/file.webm". No i to okazało się niemożliwe z powodu tego slasha chyba żebym wcześniej zdefiniował z jakiej strony chce pobierać i wpisał tylko "file.webm". Właściwie to ta funkcja powinna się nazywać "command_not_found_handler()" tak jak to nazwałem na stackoverflow a nie "myFunction()"

0

Ewentualnie można by jeszcze podać backslashe zamiast slashy np. "http:\example.com\file.webm" i zrobić replace backslashy na slashe. Jednak jestem geniuszem.

0

Jak tam Ci będzie wygodniej.
Alternatywą jest odpalenie skryptu poprzedzającego, ale do niego należało by dużo dołożyć:

#!/bin/bash

while read -e -p '$ ' line;
do    
	if [[ $line =~ http ]]; then
		wget "$line"
	else
		eval "$line"
	fi
done
 
0

Swoją drogą ciekawe dlaczego np. u mnie to działa tak długo jak plik istnieje. Weź no pokaż .bashrc, .profile i generalnie ustawienia basha bo problem jest ciekawy.

0

@alagner a Ty też czasami nie próbujesz wpisywać w terminal nazwy funkcji i potem czegoś ze slashem? Np. "myFunction /python27/file.py"? Zmień nazwe funkcji na "command_not_found_handler" i spróbuj wpisać w terminalu bez nazwy funkcji samo "/python27/file.py" oczywiście z taką ścieżką i plikiem który istnieje u Ciebie.

1 użytkowników online, w tym zalogowanych: 0, gości: 1