"-h filename"명령을 사용하여 KornShell (ksh) 스크립트의 심볼릭 링크가 있는지 확인하려고합니다. 이것은 HP 박스에서 잘 작동합니다.파일이 LINUX OS의 링크 인 경우
Linux, AIX 및 Solaris 상자에 올바른 옵션이 무엇인지 모릅니다.
이것에 대한 통찰력이 있으십니까?
"-h filename"명령을 사용하여 KornShell (ksh) 스크립트의 심볼릭 링크가 있는지 확인하려고합니다. 이것은 HP 박스에서 잘 작동합니다.파일이 LINUX OS의 링크 인 경우
Linux, AIX 및 Solaris 상자에 올바른 옵션이 무엇인지 모릅니다.
이것에 대한 통찰력이 있으십니까?
또한 리눅스 시스템에서 -h이다, 적어도 (bash는 내 껍질입니다) :
lrwxrwxrwx 1 mule mule 37 Feb 27 09:43 mule.log -> /home/mule/runtime/mule/logs/mule.log
[[email protected] ~]$ if [[ -h mule.log ]]; then echo "mule.log is a symlink that exists" ; fi
mule.log is a symlink that exists
확인 man test
당신이 당신의 주어진 enviorment 파일과 문자열을 사용하는 데 사용할 수있는 사용 가능한 연산자를 볼 수 있습니다.
가장 좋은 대답은 시스템에서 '테스트'맨 페이지가 말하는 모든 것을 시도하는 것입니다. 작동하는 것 같으면 더 이상 보지 마십시오. 그러나, 그것이 작동하지 않는 것처럼 보일 경우, 또는 더 모호한 테스트 옵션에 대해 질문이있는 경우 쉘의 매뉴얼 페이지에서 'expr'또는 '['가 내장되어 있는지 확인해야합니다. 이 경우 쉘은/bin에서 expr 유틸리티를 호출하는 대신 내부 구현을 사용 중일 수 있습니다. 솔라리스에서 ksh93은 [맨 페이지가 그렇게 보이지는 않지만] [builtin으로 취급합니다. 트러스 출력에서 ksh가 [에 대한 expr 명령을 실행하고 있지 않음을 알 수 있습니다.
% truss -f -texec /bin/ksh '[ -h /home ]' 26056: execve("/usr/bin/ksh", 0x08047708, 0x08047714) argc = 2 26056: execve("/usr/bin/ksh93", 0x08047708, 0x08047714) argc = 2 26056: execve("/usr/bin/amd64/ksh93", 0x08047704, 0x08047710) argc = 2 % truss -f -texec /bin/ksh '/bin/expr -h /home ]' 26058: execve("/usr/bin/ksh", 0x08047700, 0x0804770C) argc = 2 26058: execve("/usr/bin/ksh93", 0x08047700, 0x0804770C) argc = 2 26058: execve("/usr/bin/amd64/ksh93", 0x080476FC, 0x08047708) argc = 2 26058: execve("/bin/expr", 0x00418360, 0x00418398) argc = 4
-h
는 POSIX spec의 일부이고; 그것은 막연하게 합리적인 모든 곳에서 효과가 있어야합니다. 맥 OS X에 man test
에 따르면
: 당신이 -h
이 작동하지 않습니다 어디서나 찾을 그래서 만약
-h file True if file exists and is a symbolic link. This operator is retained for compatibility with previous versions of this program. Do not rely on its existence; use -L instead.
-L
-L
을 시도해야합니다.
(THW) 두 가지 옵션은 $ 만약
if [ -h filename ]
OR
ls -ltr | grep filename | grep ^l
입니까? 0이면 파일은 링크되지 않은 상태로 링크됩니다. 대신 첫 번째 옵션을 선호합니다.