LINUX.ORG.RU

История изменений

Исправление Valdor, (текущая версия) :

Переработал. На свежий мозг мне твой вариант показался более правильным:

#!/bin/bash
if [ `compgen -c | grep -x "$1"` ]
then
	echo "Файл находится в PATH"
	$* &
	disown
elif [ -e "$1" ]
then
	echo "Файл существует по указанному пути"
	if [ -x "$1" ]
	then
		if [[ "$(dirname $1)" = "." ]]
		then
			echo "Файл находится в текущем каталоге"
			./$* &
			disown
		else
			$* &
			disown
		fi
	else
		xdg-open "$1" &
		disown
	fi
else
	echo "Такого файла нет ни по указанному пути, ни в PATH"
fi

Фишка такова. Допустим, какой-то объект есть и в PATH, и в текущем каталоге. Допустим, у меня в текущем каталоге лежит файл dd, имеющий права на исполнение. Если вызову

./script.sh dd

выполнится dd из PATH

Если же

./script.sh ./dd

выполнится местный dd.

Исправление Valdor, :

Переработал. На свежий мозг мне твой вариант показался более правильным:

#!/bin/bash
if [ `compgen -c | grep -x "$1"` ]
then
	echo "Файл находится в PATH"
	$* &
	disown
elif [ -e "$1" ]
then
	echo "Файл существует по указанному пути"
	if [ -x "$1" ]
	then
		if [[ "$(dirname $1)" = "." ]]
		then
			echo "Файл находится в текущем каталоге"
			./$* &
			disown
		else
			$* &
			disown
		fi
	else
		xdg-open "$1" &
		disown
	fi
else
	echo "Такого файла нет ни по указанному пути, ни в PATH"
fi


Фишка такова. Допустим, какой-то объект есть и в PATH, и в текущем каталоге. Допустим, у меня в текущем каталоге лежит файл dd, имеющий права на исполнение. Если вызову

./script.sh dd

выполнится dd из PATH

Если же

./script.sh ./dd

выполнится местный dd.

Исходная версия Valdor, :

Переработал. На свежий мозг мне твой вариант показался более правильным:

#!/bin/bash
if [ -e "$1" ]
then
	echo "Файл существует"
	if [ -x "$1" ]
	then
		echo "Файл исполняемый"
		if `compgen -c | grep -x "$1"`
		then
			echo "Файл находится в $PATH"
			$* &
			disown
		else
			if [[ "$(dirname $1)" = "." ]]
			then
				echo "Файл в текущем каталоге"
				./$* &
				disown
			else
				$* &
				disown
			fi
		fi
	else
		xdg-open "$1" &
		disown
	fi
else
	$* &
	disown
fi